2012-05-30 11 views
12

में फ़ाइल को सहेजने/खोलने के लिए तत्काल उपयोगकर्ता यह करना मुश्किल नहीं होना चाहिए कि यह कैसे करना है। असल में मैं एक स्ट्रिंग लेने की कोशिश कर रहा हूं और क्लाइंट को बटन पर क्लिक करते समय इसे सहेजने देता हूं। इसे एक सेव/ओपन डायलॉग के साथ पॉप अप करना चाहिए। कोई अतिरिक्त घंटियाँ और सीटी या कुछ भी नहीं। यह रॉकेट विज्ञान नहीं है, (या तो मैंने सोचा होगा)।एएसपी.NET सी #

विभिन्न तरीकों का एक टन लगता है, (स्ट्रीमवाइटर, एचटीपीआरस्पॉन्स, इत्यादि), लेकिन उदाहरणों में से कोई भी मैं सही तरीके से काम नहीं ढूंढ पाया या क्या हो रहा है उसे समझा सकता हूं। अग्रिम में धन्यवाद।

एक उदाहरण मैंने पाया कोड के कई ब्लॉकों में से एक ...

String FileName = "FileName.txt"; 
String FilePath = "C:/...."; //Replace this 
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 
response.ContentType = "text/plain"; 
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
response.TransmitFile(FilePath); 
response.Flush(); 
response.End(); 

लाइन (यह, इस के आसपास अपने जवाब के आधार पर नहीं कर सकते हैं। सिर्फ एक उदाहरण है) 2 उस स्ट्रिंग को प्रतिस्थापित करने के लिए कहता है। कैसे? इस कोड को एक संवाद लाने के रूप में विज्ञापित किया गया था। मुझे कोड में पथ सेट नहीं करना चाहिए, है ना?

संपादित करें:

 string FilePath = Server.MapPath("~/Temp/"); 
     string FileName = "test.txt"; 

     // Creates the file on server 
     File.WriteAllText(FilePath + FileName, "hello"); 

     // Prompts user to save file 
     System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
     response.ClearContent(); 
     response.Clear(); 
     response.ContentType = "text/plain"; 
     response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
     response.TransmitFile(FilePath + FileName); 
     response.Flush(); 

     // Deletes the file on server 
     File.Delete(FilePath + FileName); 

     response.End(); 
+0

यह नमूना से पता चलता वापस एक फ़ाइल स्ट्रीम करने के लिए कैसे ग्राहक के लिए। क्या आप क्लाइंट पर एक सेव/ओपन डायलॉग का आह्वान करने का कोई तरीका ढूंढ रहे हैं ताकि आप अपने सर्वर पर एक फाइल अपलोड कर सकें? –

+0

"असल में मैं एक स्ट्रिंग लेने की कोशिश कर रहा हूं और क्लाइंट को बटन पर क्लिक करते समय इसे सहेजने देता हूं।" कुछ सरल ... File.WriteAllText ("सी: \\ text.txt", "हैलो"); एक संवाद के अलावा। मैं चाहता हूं कि उपयोगकर्ता इसे जो भी स्थान निर्दिष्ट करे, उसे डाउनलोड कर सके। – Ber53rker

उत्तर

5

लाइन 2 (FilePath) सर्वर

लाइन 8 पर फ़ाइल के लिए पथ इंगित करता है।

आप फ़ाइल संचारित नहीं है, तो मैं नहीं यकीन है कि अगर संवाद सब (भले ही आप एक हैडर सेट)

फिर भी पर पॉप अप होगा हूँ, मुझे लगता है कि लाइन 8 पढ़ना चाहिए:

response.TransmitFile(FilePath + FileName); 
1

FilePath फ़ाइल आप ग्राहक के लिए भेजना चाहते हैं को इंगित करना है अंतिम परिणाम (फिर से संपादित, हटाएँ एंड() से पहले आने के लिए है)। सर्वर पर यह पथ है।

response.TransmitFile(FilePath); 

पहुंचाता है कि ग्राहक के लिए विशिष्ट फ़ाइल और वह है क्या संवाद बचाने पॉप है:

3

ब्राउज़र द्वारा एक डिफ़ॉल्ट संवाद बॉक्स होगा, अगर इसे कुछ फ़ाइल के रूप में प्रतिक्रिया मिलेगी। आप ब्राउज़र कि डिफ़ॉल्ट संवाद बॉक्स प्रदर्शित करने के लिए चाहते हैं, तुम सब करने की जरूरत है फ़ाइल है, जो आप उन तरीकों की संख्या में कर सकते हैं के रूप में ब्राउज़र को जवाब भेजें है:

  1. यदि यह एक स्थिर फ़ाइल है,

    • सबसे अच्छा तरीका सिर्फ एंकर टैग के href में फ़ाइल का पथ उल्लेख करना है। (जाहिर है यदि आपके पास सुरक्षा चिंता नहीं है)
    • बस अपनी प्रतिक्रिया के साथ, यह आपके उदाहरण में किया गया है।
    • अन्य तरीके तुम यहाँ उल्लेख कर सकते हैं 4 ways to send pdf from asp.net
  2. यदि यह एक गतिशील फ़ाइल जो आप रन टाइम पर उत्पन्न करने के लिए की जरूरत है, तो आप एक चाल कर सकते हैं, filestream से फाइल उत्पन्न, कुछ अस्थायी फ़ोल्डर में रख दें सर्वर पर, ऊपर वर्णित एक स्थिर फ़ाइल के रूप में इसे वापस पढ़ें।

1

बस इस कोड का उपयोग यह खोलने या सिस्टम पर फ़ाइल को सहेजने के लिए एक संवाद खोलने के लिए उपयोगकर्ता संकेत करने के लिए काम करना चाहिए ....

byte[] bytesPDF = System.IO.File.ReadAllBytes(@"C:\sample.pdf"); 

     if (bytesPDF != null) 
     { 

      Response.AddHeader("content-disposition", "attachment;filename= DownloadSample.pdf"); 
      Response.ContentType = "application/octectstream"; 
      Response.BinaryWrite(bytesPDF); 
      Response.End(); 
     } 
+0

बाइनरीवाइट मैं क्लाइंट तक जाने वाले एक्सेल और डेटा के लिए एक ही काम कर रहा हूं (देव उपकरण में चेक किया गया है) लेकिन यह फ़ाइल को सहेजने के लिए संकेत नहीं दे रहा है। –