मेरे DownloadFile पृष्ठ की Page_Load विधि में, उपयोगकर्ता जिस फ़ाइल नाम को डाउनलोड करना चाहता है, उसे क्वेरी स्ट्रिंग से पुनर्प्राप्त किया जाता है। फ़ाइल को Azure Blob Storage खाते में होस्ट किया गया है। मैं इस दृष्टिकोण के माध्यम से साझा पहुंच हस्ताक्षर (एसएएस) का उपयोग कर फ़ाइल डाउनलोड करने का प्रयास कर रहा हूं:

var containerName = "containerName";
var con = "connectionString";
CloudStorageAccount account = CloudStorageAccount.Parse(con);

var blobClient = account.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference("file.pdf");
var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
    Permissions = SharedAccessBlobPermissions.Read,
    SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10),
}, new SharedAccessBlobHeaders()
{
    ContentDisposition = "attachment; filename=file.pdf"
});

var blobUrl = string.Format("{0}{1}", blob.Uri.AbsoluteUri, sasToken);
Response.Redirect(blobUrl);

हालाँकि, यह फ़ाइल डाउनलोड नहीं करता है। इसके बजाय, ब्राउज़र केवल फ़ाइल की विकृत वर्ण स्ट्रीम दिखाता है:

Garbled Characters

blobUrl मान्य प्रतीत होता है। लेकिन Response.Redirect उम्मीद के मुताबिक काम नहीं कर रहा है। क्या मुझसे कुछ गलत हो रही है?

नोट: मैं WebForms (दुर्भाग्य से) का उपयोग कर रहा हूं, नहीं MVC

3
JoshG 26 जिंदा 2021, 05:57
क्या इससे आपके सवाल का जवाब मिलता है? Azure Blob फ़ाइलों को MVC3 में डाउनलोड करना
 – 
Jazb
26 जिंदा 2021, 07:14
क्या ContentType प्रॉपर्टी को application/pdf पर सेट करना ज़रूरी है?
 – 
Glenn
26 जिंदा 2021, 07:42
1
मुझे ऐसा विश्वास नहीं है क्योंकि यूआरएल वास्तविक फ़ाइल के लिए है, जिसे Azure में होस्ट किया गया है। प्रतिक्रिया में फ़ाइल नहीं है। मैंने कोशिश की कि हालांकि बिना किसी किस्मत के।
 – 
JoshG
26 जिंदा 2021, 07:51
दुर्भाग्य से, कोई अंतर नहीं। साथ ही, फ़ाइल स्वयं प्रतिक्रिया में शामिल नहीं है। इसे पहले सर्वर पर डाउनलोड नहीं किया जा रहा है। इसके बजाय, एक Azure स्टोरेज SAS टोकन का उपयोग करके एक URL जेनरेट किया जाता है, और Response.Redirect को उस जेनरेट किए गए URL पर रीडायरेक्ट करना होता है।
 – 
JoshG
27 जिंदा 2021, 03:26

1 उत्तर

सबसे बढ़िया उत्तर

मैं एक iframe का उपयोग करके समाधान निकालने में सक्षम था। अगर मैं पेज पर iframe जोड़ता हूं:

<iframe id="iframeFile" runat="server" style="display:none;"></iframe>

फिर स्रोत को कोडफाइल में सेट करें:

iframeFile.Src = blobUrl;

यह फ़ाइल डाउनलोड करता है।

यह आदर्श नहीं हो सकता है, और मुझे अभी भी यकीन नहीं है कि Response.Redirect अपेक्षा के अनुरूप काम क्यों नहीं कर रहा है। इसलिए मैं निश्चित रूप से अन्य सुझावों के लिए भी खुला हूं। लेकिन यह समाधान फ़ाइल को डाउनलोड करने में सक्षम नहीं होने की समस्या का समाधान करता है।

0
JoshG 26 जिंदा 2021, 07:54