2011-10-11 8 views
9

पर किसी फ़ाइल को डाउनलोड लिंक बनाना, मैं एक अलग फ़ाइल सर्वर पर फ़ाइल के लिए एक डाउनलोड लिंक बनाने के लिए (आसानी से, वरीयता से;) के लिए एक रास्ता तलाश रहा हूं।फ़ाइल सर्वर

स्थिति निम्नानुसार है: मैं जिस अनुप्रयोग को विकसित कर रहा हूं (vb.net में asp.net 2.0 लेकिन मेरे पास सी # में एक समान समस्या है, या तो मेरे लिए समाधान काम करता है) एक कंपनी के लिए आंतरिक रूप से चलाया जाएगा। अच्छी प्रैक्टिस के रूप में, फ़ाइल स्टोरेज और वेब एप्लिकेशन दो अलग-अलग सर्वर पर हैं।

मैं मूल रूप से एक फाइल करने के लिए एक डाउनलोड लिंक बनाने में सक्षम होने की जरूरत है, केवल उपलब्ध URL मैं का उपयोग करने की फ़ाइल \ Servername \ folder1 \ folder2 \ folder3 \ file.txt किसी भी तरह (किया जा सकता है है फ़ाइल)

वेबलिंक्स बस काम नहीं करते हैं। इस प्रकार यह वर्तमान में स्थापित है:

tablerowfield.Text = String.Format(
    "<a href=""\\servername\folder1\folder2\folder3\{0}"" 
     target=""_blank"">Click me</a>", 
    filename) 

जो स्पष्ट कारणों से काम नहीं करता है। यह उस फ़ाइल को एप्लिकेशन पथ पर लिखने के लिए सेट किया गया था और यह पूरी तरह से काम करता था, लेकिन यह अच्छा अभ्यास नहीं है और इसलिए मैं इसे बदल रहा हूं (या कोशिश कर रहा हूं)।

मैंने एक डाउनलोड पेज बनाने के बारे में समाधान पढ़े हैं और फिर आपके डीबी में एक टेबल है जिसमें लिंक हैं और डाउनलोड के लिए उचित वेब यूआरएल लौटाता है लेकिन दुर्भाग्य से मुझे सामना करने वाली समय की बाधा मुझे विकसित करने की अनुमति नहीं देती है।

मान लिया जाये कि मैंने ऊपर की तरह फाइल करने के लिए पूर्ण filepath के साथ एक स्ट्रिंग प्रदान कर सकते हैं, क्या सिर्फ एक लिंक है, जिसे क्लिक, दस्तावेज़ को डाउनलोड करता है बनाने के लिए सबसे आसान तरीका है?

नोट: मेरे पास इस पर्यावरण में 0 व्यवस्थापक अधिकार हैं। वह वास्तव में मेरी मदद नहीं कर रहा है। आइए मान लें कि मुझे उपरोक्त सही लिंक दिया गया है और उचित फ़ाइल पहुंच अधिकार और ऐसे हैं।

अद्यतन:

ऊपर के उदाहरण फ़ायरफ़ॉक्स और क्रोम में IE में काम करता है, लेकिन नहीं। आईई इसे एक फ़ाइल में परिवर्तित करता है: // servername/... लिंक जो यह करता है, लेकिन एफएफ और क्रोम दोनों ने सक्रिय रूप से निर्णय लिया कि यह असुरक्षित है और इसे अपने ब्राउज़र से अक्षम कर दिया है।

उत्तर

16

आप ashx फ़ाइल (जैसे कि, downloadfile.ashx) का उपयोग कर सकते हैं और निम्नलिखित कोड का उपयोग (नहीं परीक्षण किया है, लेकिन यह ऐसा ही कुछ हो जाएगा) उस में:

Response.Clear(); 
Response.ContentType = "application/octet-stream"; 
Response.AddHeader("Content-Disposition", "attachment; filename=abc.txt");            
Response.WriteFile(Server.MapPath("\\servername\folder1\folder2\folder3\abc.txt")); 
Response.End(); 

और फिर अपने लंगर में इस का उपयोग टैग की तरह:

<a href="downloadfile.ashx" target=""_blank"">Click me</a> 

नोट:

<a href="downloadfile.ashx?file=abc.txt" target=""_blank"">Click me</a> 

: आप की तरह अलग अलग फ़ाइलों को डाउनलोड के लिए मानकों पारित कर सकते हैं और फिर, एएसएक्स फ़ाइल में, उचित फ़ाइल डाउनलोड करने के लिए फ़ाइल नाम का उपयोग करें।

+0

ठीक है मैं हैंडलर काम कर मिल गया की तरह उपयोग कर सकते हैं, लेकिन यह मुझे में त्रुटियों gving रहता है Response.WriteFile। मैं "\\ server \ folder \ file.txt" फ़ॉर्म की एक स्ट्रिंग दर्ज करता हूं और मुझे मिलता है: पथ '/server/folder/file.txt' को मैप करने में विफल रहा मैंने हर संभव फ़ाइल को आजमाया। इस मुद्दे पर कोई अनुभव? – Flater

+0

जैसा कि मैंने पहले ही उल्लेख किया है, आप पहले लिंक, file = otherfile.txt आदि के लिए फ़ाइल = abc.txt जैसे पैरामीटर को पारित कर सकते हैं। तो आपको फ़ाइल नाम गतिशील रूप से मिलेंगे और उन्हें ASHX फ़ाइल में पास कर दिया जाएगा। आपको एएसएचएक्स फ़ाइल की आवश्यकता है ताकि आप उपयोगकर्ता को सर्वर पथ का उपयोग करने के बजाय वहां (आपके डोमेन) से डाउनलोड कर सकें जो क्लाइंट साइड पर मौजूद नहीं है (यदि यह लैन पर नहीं है) – wasimbhalli

+0

ठीक है मेरी पिछली पोस्ट को अनदेखा करें मैं बस सर्वर को छोड़ सकता हूं .Mappath और फिर यह काम करता है :) अभी भी इसे अंतिम रूप देने पर थोड़ा अस्पष्ट है लेकिन आपने मुझे बहुत भयानक मदद की है! धन्यवाद! – Flater

0

\\servername\folder1\folder2\folder3\... एक यूएनसी पथ जो किसी ब्राउज़र से नहीं किया जा सकता है। चूंकि फ़ाइल एक अलग सर्वर पर हैं, इसलिए आपको फ़ॉर्म की विशेषता href की आवश्यकता है।http://10.1.1.30/folder1/folder2/file.txt

यहाँ कैसे आप से आईपी पते मिल है:

सर्वर-नाम ग्राहकों द्वारा unresolvable है, तो आप पहली बार सर्वर का IP पता और फिर फार्म के href तैयार करने की जरूरत है सर्वर-नाम:

IPAddress[] host; 
host = Dns.GetHostAddresses("server-name"); 
string ip = host[0].ToString();   

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

मैं मूल रूप से एक फाइल करने के लिए एक डाउनलोड लिंक बनाने में सक्षम होने की जरूरत है

एशक्स समाधान के साथ आपका एप्लिकेशन सर्वर से फ़ाइल पढ़ रहा है और ग्राहकों को सीधे फ़ाइल सर्वर से फ़ाइल डाउनलोड करने के लिए एक लिंक प्रदान करने के बजाय ग्राहकों को रिले करेगा।

3

कोड का यह टुकड़ा नाम = hi.txt और सामग्री के साथ डाउनलोड फ़ोल्डर में एक फ़ाइल बना देगा "धन्यवाद भगवान, अंत में फ़ाइल डाउनलोड हो गई।"

Response.Clear(); 
Response.ContentType = "application/octet-stream"; 
Response.AddHeader("Content-Disposition", "attachment; filename=hi.txt"); 
Response.Write("thanks god, finally file got downloaded."); 
Response.End(); 
0

यदि आपकी फ़ाइल सर्वर पर पहले से ही वहाँ है, तो आप इस कोड को अपने डाउनलोड बटन क्लिक करें घटना में इस

protected void downloadpdf_Click(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.ContentType = "application/octet-stream"; 
    Response.AddHeader("Content-Disposition", "attachment; filename=""downloadName.pdf"""); 
    Response.WriteFile(Server.MapPath(@"~/path of pdf/actualfile.pdf")); 
    Response.End(); 
} 
+0

हालांकि सही है, यह उत्तर बिल्कुल वैसा ही है जैसा मैंने समाधान के रूप में चिह्नित किया है * लगभग दो साल पहले *। – Flater

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