दिलचस्प पोस्ट
LINQ ऑर्डरबाई डेस्डिंग क्वेरी एक jQuery UI संवाद में डेटा पास करना UIWebView का उपयोग करके HTML कोड से उद्देश्य सी कोड में विधि डालें फ़ाइल अपलोड नियंत्रण का उपयोग करके एकाधिक फ़ाइलों को कैसे चुनना है? तालिका चर पर एक अनुक्रमणिका बनाना क्या लूप के लिए विभिन्न प्रकार के दो चर को घोषित करना संभव है? .NET अनुप्रयोगों के लिए स्क्रिप्टिंग कार्यक्षमता को जोड़ना अपाचे के साथ वेबसाइट छवि कैशिंग PHP का उपयोग कर SQL सर्वर में स्ट्रिंग कैसे बचें? जावास्क्रिप्ट बंद करने में मेमोरी लीक जोखिम कैसे PHP में सरणी से अल्पविराम से अलग सूची बनाने के लिए? मिश्रित अल्फा / संख्यात्मक सरणी सॉर्ट करें हॉवर पर बोल्ड होने पर इनलाइन तत्वों को बदलते हैं awk जगह में संशोधन को बचाने 1 प्रतिबद्ध द्वारा वापस स्थानीय और दूरस्थ जीआईटी भंडार रोलिंग

कैसे एक फ़ाइल नाम के रूप में अपलोड एक Blob FormData?

मैं वर्तमान में निम्नलिखित कोड के साथ क्लिपबोर्ड से चिपक गई छवियां अपलोड कर रहा हूं:

// Turns out getAsFile will return a blob, not a file var blob = event.clipboardData.items[0].getAsFile(), form = new FormData(), request = new XMLHttpRequest(); form.append("blob",blob); request.open( "POST", "/upload", true ); request.send(form); 

अपलोड फॉर्म फ़ील्ड को इस प्रकार से एक नाम प्राप्त करें: Blob157fce71535b4f93ba92ac6053d81e3a

कोई भी सर्वर साइड संचार किए बिना, इस फाइल नाम क्लाइंट साइड को सेट करने या प्राप्त करने का कोई तरीका है?

वेब के समाधान से एकत्रित समाधान "कैसे एक फ़ाइल नाम के रूप में अपलोड एक Blob FormData?"

क्रोम और फ़ायरफ़ॉक्स के लिए, इसका उपयोग करें:

 form.append("blob",blob, filename); 

( एमडीएन दस्तावेज़ीकरण देखें)

इसे यहां जोड़ना क्योंकि यहां ऐसा नहीं लगता है

form.append("blob",blob, filename); के उत्कृष्ट समाधान के अलावा। form.append("blob",blob, filename); आप ब्लॉब को एक File इंस्टेंस में भी बदल सकते हैं:

 var blob = new Blob([JSON.stringify([0,1,2])], {type : 'application/json'}); var fileOfBlob = new File([blob], 'aFileName.json'); form.append("upload", fileOfBlob); 

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

तुम्हारा सबसे अच्छा शर्त है कि आप अपनी फाइल नामकरण योजना के साथ आए और ब्लॉब के साथ भेज दें।

 form.append("filename",getFileName()); form.append("blob",blob); function getFileName() { // logic to generate file names } 

इसका परीक्षण नहीं किया है, लेकिन उसे ब्लॉब्स डेटा यूआरएल को सतर्क करना चाहिए:

 var blob = event.clipboardData.items[0].getAsFile(), form = new FormData(), request = new XMLHttpRequest(); var reader = new FileReader(); reader.onload = function(event) { alert(event.target.result); // <-- data url }; reader.readAsDataURL(blob); 

यह नाम एक वस्तु URL GUID से प्राप्त होता है उस ऑब्जेक्ट यूआरएल को प्राप्त करने के लिए निम्नलिखित करें जिसे नाम से प्राप्त किया गया था।

 var URL = self.URL || self.webkitURL || self; var object_url = URL.createObjectURL(blob); URL.revokeObjectURL(object_url); 

object_url को blob:{origin}{GUID} रूप में स्वरूपित किया जाएगा blob:{origin}{GUID} Google क्रोम में और moz-filedata:{GUID} फ़ायरफ़ॉक्स में moz-filedata:{GUID} । एक प्रोटोकॉल प्रोटोकॉल + होस्ट + प्रोटोकॉल के लिए गैर मानक पोर्ट है। उदाहरण के लिए, blob:http://stackoverflow.com/e7bc644d-d174-4d5e-b85d-beeb89c17743 या blob:http://[::1]:123/15111656-e46c-411d-a697-a09d23ec9a99 आप शायद GUID निकालना चाहते हैं और किसी भी डैश को पट्टी कर सकते हैं।

यह वाकई इस बात पर निर्भर करता है कि दूसरे पक्ष के सर्वर को कैसे कॉन्फ़िगर किया गया है और किस प्रकार से यह एक ब्लॉब पोस्ट को कैसे प्रबंधित करता है, इसके आधार पर। आप अपना पद के लिए इच्छित नाम को पथ में डालने का प्रयास कर सकते हैं।

 request.open( "POST", "/upload/myname.bmp", true ); 

क्या आप Google App Engine का प्रयोग कर रहे हैं? आप फ़ाइल नामों और सर्वर से प्राप्त नाम के बीच के रिश्ते को बनाए रखने के लिए कुकीज़ (जावास्क्रिप्ट के साथ बनाया) का उपयोग कर सकते हैं।

जब आप Google Chrome का उपयोग कर रहे हैं तो आप इस के लिए Google Filesystem API उपयोग / दुरुपयोग कर सकते हैं। यहां आप एक निर्दिष्ट नाम के साथ एक फ़ाइल बना सकते हैं और इसे एक ब्लॉब की सामग्री लिख सकते हैं। फिर आप परिणाम को उपयोगकर्ता को वापस कर सकते हैं।

फ़ायरफ़ॉक्स के लिए मुझे एक अच्छा तरीका नहीं मिला है; संभवतः फ्लैश का एक छोटा सा टुकड़ा, जैसे downloadify करने के लिए एक ब्लॉब नाम की आवश्यकता है।

IE10 में msSaveBlob() में एक msSaveBlob() फ़ंक्शन है

शायद यह एक ब्लॉब डाउनलोड करने के लिए अधिक है, लेकिन यह संबंधित है।