2010-02-12 7 views
14

क्या कोई उपयोगकर्ता किसी अन्य एएसपी.NET पृष्ठ से किसी लिंक पर क्लिक करते समय एक डाउनलोड लिंक (या किसी भी फ़ाइल प्रकार) को आउटपुट करना संभव है?एएसपी.NET रिटर्न छवि .aspx लिंक

मेरे पास फ़ाइल का नाम और बाइट [] है।

<a href="getfile.aspx?id=1">Get File</a> 

... जहां getfile getfile.aspx पृष्ठ पर जाने के बजाय फ़ाइल लौटाता है।

उत्तर

19

आप वास्तव में चाहते हैं .ashx for that होगा;)

public class ImageHandler : IHttpHandler 
{ 
    public bool IsReusable { get { return true; } } 

    public void ProcessRequest(HttpContext ctx) 
    { 
    var myImage = GetImageSomeHow(); 
    ctx.Response.ContentType = "image/png"; 
    ctx.Response.OutputStream.Write(myImage); 
    } 
} 
+0

क्या एएसपीएक्स पेज पर इसका उपयोग करने का कोई अच्छा कारण है? –

+1

.aspx पृष्ठ जीवन चक्र के माध्यम से जाना होगा। .ashx यहां बेहतर है क्योंकि इसके लिए कोई आवश्यकता नहीं है, इसलिए शायद बेहतर प्रदर्शन करता है। यह भी देखें: http: // stackoverflow।कॉम/प्रश्न/5469491/एएसपीएक्स-बनाम एशक्स-मुख्य-अंतर – ziya

1

हाँ, आप पूरी तरह से प्रतिक्रिया स्पष्ट और एक स्ट्रिंग के रूप में छवि बाइट डाटा से बदलने के लिए है, और आप छवि के प्रकार के अनुसार सामग्री प्रकार के लिए प्रतिक्रिया हेडर स्थापित करने के लिए सुनिश्चित करने की आवश्यकता

+0

अगर मैं सामग्री प्रकार की जरूरत नहीं है क्या? –

+0

इसे फ़ाइल एक्सटेंशन से अलग करें। यह सब ओएस वैसे भी कर रहा है (एक gif में एक jpg एक्सटेंशन बदलें और किसी अंतर्निहित फ़ंक्शन या उपयोगिता से पूछें कि यह किस प्रकार की फ़ाइल है)। – Rich

+2

http://www.w3.org/Protocols/rfc1341/4_Content-Type.html और http://en.wikipedia.org/wiki/Internet_media_type के अनुसार आपको अज्ञात सामग्री के लिए "एप्लिकेशन/ऑक्टेट-स्ट्रीम" का उपयोग करना चाहिए -प्रकार। लेकिन यदि आप पृष्ठ में एक छवि को दिखाना चाहते हैं तो ब्राउज़र को सामग्री-प्रकार को जानना होगा और आपको @Rich क्या कहना है। लेकिन ऑक्टेट-स्ट्रीम सामग्री प्रकार काम करेगा यदि फ़ाइल केवल फ़ाइल को सहेजना है क्योंकि ब्राउजर को इसकी परवाह नहीं है कि यह क्या है। –

3

यहाँ कैसे मैं अतीत में इस किया है:

Response.Clear(); 
Response.Buffer = true; 
Response.AddHeader("Content-Disposition", string.Format("inline;filename=\"{0}.pdf\"",Guid.NewGuid())); 
Response.ContentType = @"application/pdf"; 
Response.WriteFile(path); 
+0

"इनलाइन" के बीच एक जगह होने के बाद और "फ़ाइल नाम" मेरे सर्वर पर कोई फर्क नहीं पड़ता –

5

How to Create Text Image on the fly with ASP.NET

कुछ इस तरह:

string Path = Server.MapPath(Request.ApplicationPath + "\image.jpg"); 
Bitmap bmp = CreateThumbnail(Path,Size,Size); 
Response.ContentType = "image/jpeg"; 
bmp.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg); 
bmp.Dispose(); 
+0

एशक्स वह समय है जो आप चाहते हैं लेकिन कभी-कभी आपको वास्तव में एएसपीएक्स पेज की आवश्यकता होती है, उदाहरण के लिए यदि आप MapPageRoute का उपयोग करते हैं जो एशक्स स्वीकार नहीं करता है। – Zyo

0

getfile.aspx के लिए codebehind कोड एक content-type होना आवश्यक है और ब्राउज़र को पता चल जाएगा कि यह एक छवि या एक अज्ञात फ़ाइल है और आप इसे बचाने के लिए अनुमति देता है।

asp.net में आप Response वस्तु का उपयोग करके ContentType सेट कर सकते हैं, अर्थात

Response.ContentType = "image/GIF" 

Here आप गतिशील रूप से उत्पन्न छवि

1

हाँ, यह संभव है के लिए एक ट्यूटोरियल है। प्रतिक्रिया ऑब्जेक्ट के दो भाग हैं जिन्हें आपको सेट करने की आवश्यकता है: सामग्री-प्रकार और HTTP शीर्षलेख। MSDN documentation में प्रतिक्रिया ऑब्जेक्ट पर विवरण है लेकिन मुख्य अवधारणा बहुत सरल है। कोड को इस तरह कुछ (वर्ड डॉक के लिए) पर सेट करें।

Response.ContentType="application/ms-word"; 
Response.AddHeader("content-disposition", "attachment; filename=download.doc"); 

वहाँ एक और अधिक पूरा उदाहरण here

0

ashx है ...

public class ImageHandler : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext ctx) 
    { 
     string path = ".....jpg"; 

       byte[] imgBytes = File.ReadAllBytes(path); 
       if (imgBytes.Length > 0) 
       { 
        ctx.Response.ContentType = "image/jpeg"; 
        ctx.Response.BinaryWrite(imgBytes); 
       } 
    } 

    public bool IsReusable 
    { 
     get {return false;} 
    } 
} 
संबंधित मुद्दे