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
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:
Nasıl Firefox 3 HTML giriş formu dosya...
CSS olarak Base64 iyi ya da kötü uygul...
JSON Dize ikili Veri. Bir şey Base64 d...
Nasıl İçerik-Disposition dosya adı par...
Java kod çözme Base64 veri...