2013-01-15 14 views
9

पर Uint8Array को स्वीकार नहीं करता मैं एक ब्लॉब ऑब्जेक्ट बना सकते हैं और यह के निर्माता यह क्रोम और Firefox विंडो क्रोम और iOS पर सफारी में पर पर ठीक काम करता है के लिए एक Uint8Array पारित तथापि Blod का डेटा नहीं है करने के लिए प्रयास Uint8Array लेकिन पाठ: [ऑब्जेक्ट Uint8Array]ब्लॉब ios

मुझे सर्वर पर कैनवास अपलोड करने की आवश्यकता है।

क्या कोई कामकाज है?

+0

लगता है कि उस विधि की तरह स्ट्रिंग पैरामीटर की अपेक्षा है लेकिन आप किसी ऑब्जेक्ट में पास करते हैं, इसलिए यह हैस्ट्रिंग() विधि को जेएस में, ऑब्जेक्ट्स का प्रतिनिधित्व करने के लिए आपके प्रश्न में कुछ देता है। – marekful

+0

मुझे ऐसा नहीं लगता है। यह एक विंडोज पीसी पर ठीक काम करता है और अगर मैं एक सामान्य सरणी पास करता हूं। यह ठीक काम करता है। –

उत्तर

11

मैं एक ही समस्या के साथ संघर्ष कर रहा हूं। जब मैं एक ArrayBuffer के साथ Uint8Array बैकअप करता हूं, यह सफारी और क्रोम दोनों में काम करता है (अभी तक अन्य ब्राउज़रों में परीक्षण नहीं किया गया है) लेकिन क्रोम एक चेतावनी संदेश प्रिंट करता है। क्रोम का कहना है कि मुझे ब्लॉब() कन्स्ट्रक्टर को पास करने से पहले डेटाव्यू में ऐरेबफर को लपेटना होगा।

// write the bytes of the string to an ArrayBuffer 
var ab = new ArrayBuffer(byteString.length); 
var ia = new Uint8Array(ab); 
for (var i = 0; i < byteString.length; i++) { 
    ia[i] = byteString.charCodeAt(i); 
} 

new Blob([ab], {type: mimeString}); 

संपादित

सटीक क्रोम प्रतिवाद संदेश है:

ArrayBuffer मूल्यों ब्लॉब निर्माता में पदावनत कर रहे हैं। इसके बजाय ArrayBufferView का उपयोग करें।

+0

दुर्भाग्य से यह सफारी 6.0.3 (7536.28.10) पर मदद नहीं करता है। – mtyaka

+5

इससे मुझे मेरी समस्या का हल ढूंढने में मदद मिली: एक Uint8Array 'u' के लिए, मैंने 'u.buffer' को' u' 'के बजाय ब्लॉब कन्स्ट्रक्टर में पास कर दिया। – jtbandes

+0

धन्यवाद @ jtbandes जो इसे मेरे लिए तय करता है! मैं घंटों के लिए अपने डेस्क के खिलाफ अपने सिर को टक्कर लगी थी :) –