ঠিক আছে লোকেরা, আমি এই ত্রুটি বার্তার পিছনে সুরক্ষা কারণগুলি পুরোপুরি বুঝতে পেরেছি, তবে কখনও কখনও আমাদের প্রয়োজন হয় না ... এবং এখানে আমার। এটি এএসপি.নেট ব্যবহার করে (জাভাস্ক্রিপ্টের চেয়ে এই প্রশ্নটির উপর ভিত্তি করে) তবে আশা করি এটি কারও পক্ষে কার্যকর হবে to
আমাদের ইন-হাউস অ্যাপ্লিকেশনটির একটি ওয়েবপৃষ্ঠা রয়েছে যেখানে ব্যবহারকারীরা আমাদের নেটওয়ার্ক জুড়ে ছড়িয়ে থাকা দরকারী ফাইলগুলির শর্টকাটের একটি তালিকা তৈরি করতে পারেন। তারা যখন এই শর্টকাটগুলির একটিতে ক্লিক করে, আমরা এই ফাইলগুলি খুলতে চাই ... তবে অবশ্যই, ক্রোমের ত্রুটি এটি এড়াতে পারে।
এই ওয়েবপৃষ্ঠায় বিভিন্ন শর্টকাটগুলি তালিকা করতে AngularJS 1.x ব্যবহার করে।
মূলত, আমার ওয়েবপৃষ্ঠাটি সরাসরি <a href..>
ফাইলগুলিকে নির্দেশ করে একটি উপাদান তৈরি করার চেষ্টা করছিল , কিন্তু Not allowed to load local resource
যখন ব্যবহারকারী এই লিঙ্কগুলির একটিতে ক্লিক করেন তখন এটি ত্রুটি তৈরি করে ।
<div ng-repeat='sc in listOfShortcuts' id="{{sc.ShtCut_ID}}" class="cssOneShortcutRecord" >
<div class="cssShortcutIcon">
<img ng-src="{{ GetIconName(sc.ShtCut_PathFilename); }}">
</div>
<div class="cssShortcutName">
<a ng-href="{{ sc.ShtCut_PathFilename }}" ng-attr-title="{{sc.ShtCut_Tooltip}}" target="_blank" >{{ sc.ShtCut_Name }}</a>
</div>
</div>
সমাধানটি ছিল <a href..>
এই কোডগুলির সাথে সেই উপাদানগুলিকে প্রতিস্থাপন করা , আমার কৌণিক নিয়ামকটিতে কোনও ফাংশন কল করা ...
<div ng-click="OpenAnExternalFile(sc.ShtCut_PathFilename);" >
{{ sc.ShtCut_Name }}
</div>
ফাংশনটি নিজেই খুব সাধারণ ...
$scope.OpenAnExternalFile = function (filename) {
var URL = '/Handlers/DownloadExternalFile.ashx?filename=' + encodeURIComponent(filename);
window.open(URL);
}
এবং আমার এএসপি. নেট প্রকল্পে, আমি একটি হ্যান্ডলার ফাইল যুক্ত করেছি DownloadExternalFile.aspx
যাতে এই কোডটি রয়েছে:
namespace MikesProject.Handlers
{
public class DownloadExternalFile : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string pathAndFilename = context.Request["filename"];
string filename = System.IO.Path.GetFileName(pathAndFilename);
context.Response.ClearContent();
WebClient webClient = new WebClient();
using (Stream stream = webClient.OpenRead(pathAndFilename))
{
byte[] data1 = new byte[stream.Length];
stream.Read(data1, 0, data1.Length);
context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", filename));
context.Response.BinaryWrite(data1);
context.Response.Flush();
context.Response.SuppressContent = true;
context.ApplicationInstance.CompleteRequest();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
এবং এটাই.
এখন, যখন কোনও ব্যবহারকারী আমার শর্টকাট লিঙ্কগুলির একটিতে ক্লিক করে, তখন এটি OpenAnExternalFile
ফাংশনটি কল করে , যা এই .ashx ফাইলটি খুলবে, এটি ফাইলটি আমরা খুলতে চাইলে তার পথ + ফাইল নামটি পাস করে।
এই হ্যান্ডলার কোডটি ফাইলটি লোড করে, তারপরে HTTP প্রতিক্রিয়াতে এর সামগ্রীগুলি পাস করে।
এবং, কাজ শেষ হয়েছে, ওয়েবপৃষ্ঠাটি বাহ্যিক ফাইলটি খুলবে।
ভাই! আবার - ক্রোম এই Not allowed to load local resources
ব্যতিক্রমটি ছুঁড়ে মারার একটি কারণ রয়েছে , তাই এটিকে সাবধানতার সাথে চালিত করুন ... তবে আমি এই কোডটি পোস্ট করছি কেবল এটি দেখানোর জন্য যে এটি এই সীমাবদ্ধতার চারপাশে মোটামুটি সহজ উপায়।
কেবল একটি শেষ মন্তব্য: আসল প্রশ্নটি " C:\002.jpg
" ফাইলটি খুলতে চেয়েছিল । আপনি এটি করতে পারবেন না । আপনার ওয়েবসাইটটি একটি সার্ভারে বসে থাকবে (এটি নিজস্ব সি: ড্রাইভ সহ) রয়েছে এবং এতে আপনার ব্যবহারকারীর নিজস্ব সি: ড্রাইভের কোনও সরাসরি অ্যাক্সেস নেই। সুতরাং আপনি সবচেয়ে ভাল যা করতে পারেন তা হল কোনও ড্রাইভের কোথাও ফাইল অ্যাক্সেস করার জন্য আমার মতো কোড ব্যবহার।
<input type=file>
স্থানীয় সংস্থানগুলিতে অ্যাক্সেস পেতে ব্যবহার করুন