5

मेरे पास एक पेड़-दर्शक है जो उपयोगकर्ता को फ़ाइल और उप-निर्देशिका ब्राउज़ करने की अनुमति देता है, जब उपयोगकर्ता फ़ाइल तक पहुंचता है, तो वेबसाइट https://website.com/path/subpath/file.pdf पर जाएगी। मान लीजिए कि मैं पहचान सकता हूं कि उपयोगकर्ता एक फाइल देख रहा है, निम्नलिखित होगा:URL को उजागर किए बिना एमवीसी में फ़ाइल कैसे सेवा करें?

  • नियंत्रक Azure से फ़ाइल पुनर्प्राप्त करने के लिए एक एसएएस कुंजी उत्पन्न करेगा।
  • नियंत्रक एक यूआरएल मिलेगा: https://myaccount.files.core.windows.net/path/?=accesskey

हालांकि उपयोगकर्ता इस एक्सेस कुंजी को देखने के साथ कोई समस्या नहीं है, यह अंततः समाप्त हो जाएगा, और बुकमार्क करने के लिए उपयोगकर्ता पेज के लिए, मैं उपयोगकर्ता चाहते हैं नहीं फ़ाइल उत्पादन के लिए Azure पथ पर पुनः निर्देशित किया है, लेकिन ASP.NET के लिए के रूप में यदि उपयोगकर्ता https://website.com/path/subpath/file.pdf

पर अब भी है तो अंत प्रश्न मूल रूप से है:

कैसे कर सकते हैं मैं फ़ाइल को आउटपुट किए बिना फ़ाइल फ़ाइल/यूआरएल दिखाए बिना आउटपुट करता हूं?

उत्तर

7

आप अपने स्टोरेज से फ़ाइल को बाइट सरणी के रूप में पढ़ने की कोशिश कर सकते हैं और File विधि को क्रिया विधि से वापस करने के लिए उपयोग कर सकते हैं।

public ActionResult View(int id) 
{ 
    // id is a unique id for the file. Use that to get the file from your storage. 
    byte[] byteArrayOfFile=GetFileInByteArrayFormatFromId(id); 
    return File(byteArrayOfFile,"application/pdf"); 
} 

GetFileInByteArrayFormatFromId रिटर्न अपने भंडारण/नीला से पढ़ने के बाद फाइल का बाइट सरणी संस्करण मान लिया जाये। आप अपने पर्यावरण में कुछ फाइलों को कैशिंग करने पर विचार कर सकते हैं ताकि आपको हर अनुरोध पर इसे प्राप्त करने के लिए एज़ूर तक पहुंचने की आवश्यकता न हो।

आप एक फ़ाइल धारा के रूप में फ़ाइल पढ़ सकते हैं, File विधि एक अधिभार जो कि रूप में अच्छी तरह

public ActionResult View(int id) 
{ 
    // id is a unique id for the file. Use that to get the file from your storage. 
    FileStream fileStream = GetFileStreamFromId(id);; 
    return File(fileStream, "application/pdf","Myfile.pdf"); 
} 

लेता है और है आप अपने सर्वर (कैश फ़ाइलें) में फ़ाइल उपलब्ध है, तो आप फ़ाइल विधि का एक और ओवरलोड का उपयोग कर सकते हैं जहां आप बाइट सरणी के बजाय पथ पास करेंगे।

public ActionResult View(int id) 
{ 
    var f = Server.MapPath("~/Content/Downloads/sampleFile.pdf"); 
    return File(f,"application/pdf"); 
} 

यदि ब्राउज़र को प्रतिक्रिया के प्रकार के प्रकार को प्रदर्शित करने का समर्थन है, तो प्रतिक्रिया ब्राउज़र में प्रदर्शित की जाएगी। अधिकांश प्रमुख ब्राउज़र पीडीएफ फ़ाइलों को प्रतिपादित करने का समर्थन करते हैं।

फ़ाइल विधि का एक और अधिभार है जो डाउनलोड फ़ाइल नाम लेता है जो ब्राउज़र 'सेव/डाउनलोड संवाद का उपयोग करेगा ताकि उपयोगकर्ता इसे अपना स्थानीय कंप्यूटर और/या खोल सके।

public ActionResult View(int id) 
{ 
    var pathToTheFile=Server.MapPath("~/Content/Downloads/sampleFile.pdf"); 
    return File(pathToTheFile, MimeMapping.GetMimeMapping(pathToTheFile),"Myfile.pdf"); 
} 
public ActionResult ViewFromByteArray(int id) 
{ 
    byte[] byteArrayOfFile=GetFileInByteArrayFormatFromId(id); 
    return File(byteArrayOfFile, "application/pdf","Myfile.pdf"); 
} 

इसके साथ, उपयोगकर्ता को ब्राउज़र से एक डाउनलोड प्रॉम्प्ट मिलेगा।

+0

Azure 'file.DownloadToByteArray()' का उपयोग कर बाइट सरणी के रूप में सीधे डाउनलोड करने की अनुमति देता है। – devSparkle

संबंधित मुद्दे

 संबंधित मुद्दे