2011-01-25 18 views
7

क्या एएसएमएक्स वेब सेवाओं का उपयोग कर सर्वर में किसी फ़ोल्डर में स्थानीय फाइल सिस्टम से फ़ाइल अपलोड करने का कोई तरीका है (डब्ल्यूसीएफ नहीं, क्यों नहीं पूछें :)?ASMX फ़ाइल अपलोड

युपीडी

PSfile आकार 2-10 हो सकता है जीबी

उत्तर

2

सर्वर पर बड़ी फ़ाइलों को अपलोड करने के लिए मेरा मुफ्त टूल विकसित करते समय, मैं .NET 2.0 और वेब सेवाओं का भी उपयोग कर रहा हूं।

एप्लिकेशन को बहुत बड़ी फ़ाइलों के लिए अधिक त्रुटि सहनशील बनाने के लिए, मैंने एक बड़ा byte[] सरणी अपलोड करने का निर्णय नहीं लिया, बल्कि इसके बजाय "चुने हुए" अपलोड को अपलोड किया।

आईई। 1 एमबी फ़ाइल अपलोड करने के लिए, मैं अपने अपलोड एसओएपी फ़ंक्शन को 20 बार कॉल करता हूं, प्रत्येक कॉल 50 KB के byte[] सरणी को पास करता है और इसे सर्वर पर फिर से जोड़ता है।

मैं संकुल भी गिनता हूं, जब कोई बूंदता है, तो मैं इसे कई बार फिर से अपलोड करने का प्रयास करता हूं।

यह अपलोड को अधिक त्रुटि सहनशील बनाता है और यूआई में अधिक प्रतिक्रियाशील बनाता है।

यदि आप रुचि रखते हैं, this is a CP article of the tool

+1

मैंने इसके बारे में सोचा। लेकिन मैंने यह भी सोचा कि इससे बड़ी संख्या में बग हो सकते हैं :) – 2xMax

+0

हां, इसे एक गोल चीज़ बनाने में काफी समय लगा। –

9

ज़रूर:

[WebMethod] 
public void Upload(byte[] contents, string filename) 
{ 
    var appData = Server.MapPath("~/App_Data"); 
    var file = Path.Combine(appData, Path.GetFileName(filename)); 
    File.WriteAllBytes(file, contents); 
} 

तो, सेवा का पर्दाफाश डबल्यूएसडीएल से एक ग्राहक प्रॉक्सी उत्पन्न, आह्वान, मानक सामान ।

-

अद्यतन:

मैं बड़ी फ़ाइलों से निपटने के बारे अब अपनी अपडेट देखें। MTOM protocol with streaming जिसे डब्ल्यूसीएफ में बनाया गया है, ऐसे परिदृश्यों को संभालने के लिए अनुकूलित किया गया है।

+0

बफर ??? मुझे लगता है कि आप सामग्री का मतलब है .... – scartag

+0

बड़ी फाइलों के बारे में क्या? – 2xMax

+0

@scartag, हाँ यही मेरा मतलब था। –

0

बहुत बड़ी फ़ाइलों के लिए, उन्हें वेब सेवाओं पर भेजने का एकमात्र प्रभावी तरीका MTOM के साथ है। और एमटीओएम केवल supported in WCF है, जिसे आपने अस्वीकार कर दिया है। पुरानी शैली के साथ ऐसा करने का एकमात्र तरीका .asmx वेब सेवाएं वह उत्तर है जो @ डारिन डिमिट्रोव ने दिया था। और उस समाधान के साथ, आपको बेस 64 एन्कोडेड (33% अधिक बैंडविड्थ) फ़ाइल की लागत का सामना करना पड़ेगा।

0

हमारे पास समान आवश्यकता थी, मूल रूप से क्लाइंट पक्ष पर मानक FileUpload नियंत्रणों का उपयोग करके HTTP POST के माध्यम से एक फ़ाइल अपलोड करना था। अंत में हमने एएसएमएक्स वेब सेवा प्रोजेक्ट (केवल इसकी एक वेब प्रोजेक्ट के बाद) में एक एएसपीएक्स पेज जोड़ा - इससे हमें http://foo/bar/Upload.aspx पर अपलोड करने की इजाजत मिली जब वेब सेवा http://foo/bar/baz.asmx पर थी। इसने वेब सेवा के भीतर कार्यक्षमता को रखा, भले ही यह एक अलग वेब पेज का उपयोग कर रहा हो।

यह आपकी आवश्यकताओं के अनुरूप हो सकता है या नहीं भी हो सकता है, @ डेरिन दृष्टिकोण एक वर्कअराउंड के रूप में भी काम करेगा, लेकिन इसके लिए आपको क्लाइंट पक्ष पर संशोधन करना होगा, जो हमारे लिए एक विकल्प नहीं था।

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