jQuery

2013-06-26 2 views
5

के माध्यम से एक अजाक्स कॉल में अन्य स्ट्रिंग के साथ ऐरेबफर भेजें, मैं एक परियोजना पर काम कर रहा हूं जो सर्वर की ओर बड़ी फाइल अपलोड करने की आवश्यकता है। मैंने फ़ाइलों को फ़ाइल (ArrayBuffer) में अपलोड करने के लिए HTML5 फ़ाइल रीडर और jQuery का उपयोग करने का निर्णय लिया।jQuery

मैंने भाग को बेस 64 स्ट्रिंग में परिवर्तित करके सफलतापूर्वक इस कार्य को समाप्त कर दिया है, JSON प्रारूप में डेटा पैरामीटर के साथ jQuery.post के माध्यम से बैकएंड सर्वर को भेजें।

उदाहरण

$.ajax({ 
    url: "/Home/Upload", 
    type: "POST", 
    data: { 
     name: block.name, 
     index: block.index, 
     base64: base64 
    }, 
    processData: true 
}); 

के लिए लेकिन चूंकि बेस 64 को बदलने के लिए बहुत बड़ी है मैं इस कोड का अनुकूलन करना चाहते हैं। मैं जानना चाहता हूं कि क्या मैं $.ajax के माध्यम से सीधे ऐरेबफर भेज सकता हूं।

मुझे पता है कि अगर मैं processData: false सेट करता हूं और केवल डेटा पैरामीटर में ऐरेबफर डालता हूं तो इसे Request.InputStream के रूप में मेरे सर्वर पक्ष में भेजा जा सकता है। लेकिन इस तरह से मैं अन्य डेटा जैसे name और index संलग्न नहीं कर सकता।

मैं जानना चाहता हूं कि मैं एक अन्य अजाक्स कॉल में अपने अन्य डेटा (नाम, अनुक्रमणिका) के साथ अकेले कच्चे ऐरेबफर (या ब्लोब, बाइनरी) भेज सकता हूं।

उत्तर

4

मुझे लगता है कि मुझे यह समस्या हल हो गई है। मैं फॉर्मूटा का उपयोग अकेले अपने संरचित डेटा को फ़ाइल बाइनरी के साथ एक रूप में बदलने के लिए कर सकता हूं। इस

 
var blob = file.slice(block.start, block.end); 
// use formdata to send block content in arraybuffer 
var fd = new FormData(); 
fd.append("name", block.name); 
fd.append("index", block.index); 
fd.append("file", blob); 
$.ajax({ 
    url: "/Home/UploadInFormData", 
    data: fd, 
    processData: false, 
    contentType: "multipart/form-data", 
    type: "POST", 
    success: function (result) { 
     if (!result.success) { 
      alert(result.error); 
     } 
     callback(null, block.index); 
    } 
}); 

तरह संहिता तो सर्वर साइड से मैं Request.Form से मेरी संरचित डेटा प्राप्त कर सकते हैं, जबकि Request.Files[0]

से द्विआधारी सामग्री