2010-09-18 6 views
8

'u kullanarak WebKit/Chrome'da ikili bir dize yükleme Birkaç kesme WebKit özelliği kullanan bir web üzerinde çalışıyorum. Esasen bunu yapar: FileReader ile yerel bir dosyayı okur, her bir dosyayı bir JavaScript unzip kütüphanesi kullanarak bir dizgiye ayırır ve her dosyayı XMLHttpRequest kullanarak POST yapar. Bu metin dosyaları için harika çalışıyor, ancak maalesef ikili dosyaları (bu durumda, görüntüler) bozar. Firefox, bu sorunu çözen bir sendAsBinary yöntemine sahiptir, ancak standart dışıdır ve diğer özellikler için bağlı olduğumuz WebKit/Chrome üzerinde çalışmaz.XHR (Firefox'un sendAsBinary'ye eşdeğer)

geçici çözümlerden bir TON vardır ve bugüne kadar bunların hiçbiri benim için çalışmak: Uzun bir dize (like this) 'de benzeri başlıklar sınırları olan bir dosya yükleme isteği alaycı

  • ve. oluşturucu dize ekleyerek ve getBlob kullanarak, BlobBuilder kullanma xhr nesnesi (as such)
  • üzerinde başlıklarının bir demet ayarlama
  • (bu konuda Krom sorunu dizisindeki as recommended) bir damla yüklemek için almak

Aradığım şey, her şeyden önce, ileriye dönük bir çözümdür. Teşekkürler!

cevap

6

Aynı problem vardı.

Bu seferki

benim için çalıştı: Burada

XMLHttpRequest.prototype.sendAsBinary = function(datastr) { 
    function byteValue(x) { 
     return x.charCodeAt(0) & 0xff; 
    } 
    var ords = Array.prototype.map.call(datastr, byteValue); 
    var ui8a = new Uint8Array(ords); 
    this.send(ui8a.buffer); 
} 

kontrol:

1

Base64 ile kodlayabilir ve sunucuda kod çözebilirsiniz.

+0

İstemiş sunucuya kolay erişim varsa http://javascript0.org/wiki/Portable_sendAsBinary. Bir alandaki (CORS izinli) bir belgeye eklemeye çalışıyorum (http://docs.couchdb.org/en/latest/api/document/attachments.html#put--db-docid-attname). Sebastien hile çalışacağız. – Fluxine