SORU
8 AĞUSTOS 2011, PAZARTESİ


Al Base64 kodlama-veri dosya Giriş Formu

Hangi Kundakçı olarak inceliyorum bu bilgi biraz tut ben basit bir HTML Formu var.

Benim tek sorunları için çalışıyorumbase64bu formda veritabanına kaydedilmesi gereken yerde sunucuya göndermeden önce dosya kodlamak.

<input type="file" id="fileupload" />

Ve Javascript jQuery:

var file = $('#fileupload').attr("files")[0];

Bazı işlemler dairemiz javascript dayanarak:.() getAsBinary, .() getAsText, .getAsTextURL

Ancak bu geri dönüş yok içerirler eklenen metin kullanılabilir'karakter' . kullanışsız İstemiyorum bir 'geri gönderme' ortaya dosyamı karşıya, ve ihtiyacım var, birden fazla form hedefleme belirli nesneler çok önemli benim için alın dosyası ve Javascript kullanımı bu şekilde.

Ne kadar yaygın dairemiz! Javascript base64 kodlayıcı birini kullanabilirim şekilde dosyayı alayım mı?

Teşekkürler

Güncelleme - burada kelle Başlayarak, çapraz tarayıcı desteği lazım!!!

Durumdayım

<input type="file" id="fileuploadform" />

<script type="text/javascript>
var uploadformid = 'fileuploadform';
var uploadform = document.getElementById(uploadformid);


/* method to fetch and encode specific file here based on different browsers */

</script>

Çapraz tarayıcı desteği ile ilgili sorunlar var

var file = $j(fileUpload.toString()).attr('files')[0];
fileBody = file.getAsDataURL(); // only works in Firefox

Ayrıca, IE desteklemiyor:

var file = $j(fileUpload.toString()).attr('files')[0];

İle değiştirmek zorunda kaldım:

var element = 'id';
var element = document.getElementById(id);

YANİ Destek için.

Bu Firefox, Chrome, Safari (ama doğru dosyayı kodlamak, ya da en azından dosya doğru gelmedi bana yayınlanmıştır sonra değil) çalışır

var file = $j(fileUpload.toString()).attr('files')[0];
var encoded = Btoa(file);

Ayrıca,

file.readAsArrayBuffer() 

Sadece HTML5? in desteklenen gibi görünüyor

Önerilen: bir sürü insanhttp://www.webtoolkit.info/javascript-base64.html

Ama base64 kodlar önce UTF_8 yöntemi TR hata bu sadece döner? (veya boş dize)

var encoded = Base64.encode(file); 

CEVAP
8 AĞUSTOS 2011, PAZARTESİ


Tarayıcı tarafı tamamen mümkün javascript.

Kolay yolu:

readAsDataURL() yöntem zaten sizin için base64 olarak kodlama olabilir. Belki de en başından beri şeyler (ilk) kaldýrmak gerekir, ama o kadar da önemli değil. Bu eğlenceli dışarı düşmüşler.

Zor yol:

Eğer zor yolu (veya çalışmıyor) denemek istiyorsanız, readAsArrayBuffer() bak. Bu bir Uint8Array verecek ve belirtilen yöntemi kullanabilirsiniz. Bu yüklemeden önce eğer verinin kendisi, görüntü veri işleme veya diğer vudu büyüsü yapıyor gibi uğraşmak istiyorsanız muhtemelen yararlıdır.

İki yöntem vardır:

  • Dize ve kullanmak için built-in btoa dönüştürmek veya benzer
    • Tüm durumlarda test etmedim, ama bana sadece char-kodları almak için çalışıyor
  • Doğrudan base64 için bir Uint8Array dönüştürmek

Geçenlerde tar in the browser hayata geçirdi. Bu sürecin bir parçası olarak, benim kendi Uint8Array -^ doğrudan yaptım . base64 uygulanması. Buna ihtiyacın olacağını sanmıyorum, ama eğer bir göz atmak istersen here; oldukça iyi değil.

Şimdi ne yaptım:

Bir Uint8Array dize dönüştürmek için kod oldukça basit ama bir Uint8Array olduğu)

function uint8ToString(buf) {
    var i, length, out = '';
    for (i = 0, length = buf.length; i < length; i  = 1) {
        out  = String.fromCharCode(buf[i]);
    }
    return out;
}

Oradan, sadece yapın:

var base64 = btoa(uint8ToString(yourUint8Array));

Şimdi Base64 base64 kodlanmış bir dize olacak, ve buraya yükle. Eğer itmeden önce bir kez daha kontrol etmek istiyorsanız, bu deneyin:

window.open("data:application/octet-stream;base64," base64);

Bu bir dosya olarak indirir.

Diğer bilgiler:

MDN belgeleri Uint8Array olarak veri almak için:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • Rockstar Games

    Rockstar Gam

    17 ŞUBAT 2006
  • Sorikan

    Sorikan

    3 ŞUBAT 2008