, lekeler yılında parçalarını tasarrufu ve daha geniş bir blob onları birleştiren kapsamalıdır: topakları
- Sebat gerekli değildir (yani tarayıcının kapatılması tüm parçaları siler)
- Dosya, yalnızca kendi dosya sistemiyle kaydetme tarafından kullanıcı tarafından devam ettirilir. Kullanıcı, kaydedilen dosyaya yeniden erişim izni vermedikçe, web uygulaması dosya kapatıldıktan sonra erişemeyecektir.
- Dosya boyutları çok büyük değilse (bunu bulmak için karşılaştırma yapmak zorunda kalacaksınız). Chrome, 1GB'lık toplam parça için benim için oldukça iyi davrandı.
simple test for using blobs as chunks ürününü oluşturdum. Farklı boyut ve yığın numaraları parametrelerle etrafında oynayabilir: o sebat ihtiyacın varsa
var chunkSize = 500000;
var totalChunks = 200;
var currentChunk = 0;
var mime = 'application/octet-binary';
var waitBetweenChunks = 50;
var finalBlob = null;
var chunkBlobs =[];
function addChunk() {
var typedArray = new Int8Array(chunkSize);
chunkBlobs[currentChunk] = new Blob([typedArray], {type: mime});
console.log('added chunk', currentChunk);
currentChunk++;
if (currentChunk == totalChunks) {
console.log('all chunks completed');
finalBlob = new Blob(chunkBlobs, {type: mime});
document.getElementById('completedFileLink').href = URL.createObjectURL(finalBlob);
} else {
window.setTimeout(addChunk, waitBetweenChunks);
}
}
addChunk();
W3C File System API neye ihtiyacınız desteklemelidir. Dosyaları ayırmak için parçaları yazmak için kullanabilirsiniz ve tüm parçalar tamamlandığında hepsini okuyabilir ve bunları tek bir dosyaya ekleyebilir ve parçaları kaldırabilirsiniz.
Uygulamanız için korumalı bir dosya sistemi atayarak çalıştığını unutmayın (belirli bir kota için) ve dosyalar yalnızca bu uygulama için erişilebilir durumdadır. Dosyalar web uygulamasının dışında kullanılacaksa, dosyayı uygulama dosya sisteminden "normal" dosya sistemine kaydetmek için kullanılan işleve ihtiyacınız olabilir. createObjectURL() yöntemini kullanarak böyle bir şey yapabilirsiniz.
Geçerli tarayıcı desteği durumu hakkında haklısınız. A Filesystem API polyfill kullanılabilir, bu dosya sistemi öykünme arka uç olarak IndexedDB (daha yaygın olarak desteklenen) dayanmaktadır. Polyfill'i büyük dosyalarda test etmedim. Boyut sınırlarına veya performans sınırlamalarına girebilirsiniz.
http://help.infragistics.com/Help/NetAdvantage/ASPNET/2013.1/CLR4.0/html/WebUpload_Saving_Files_as_Stream.html http://www.aurigma.com/docs/iu7/saving-uploaded- files-in-aspnet.htm Size yardımcı olabilecek iki bağlantıya sahibim –
Makul büyüklükteki dosyalar için, ilk içgüdüm her bloğu kendi 'Blob'unda depolamak, hepsini büyük bir Blob'la birleştirmek. sonunda (yeni kurucu kullanarak) ve son 'Blob' kurtarmak için' createObjectURL' kullanın.IIRC, JS 'Blob'lar gerektiğinde diske saklanır, bu yüzden dosyalar çok büyük olmadıkça (ya da gerçekten yanlış;), çok korkunç olmamalı mı? –
@JordanGray İyi bir fikir olabilir - İndirilen parçaların tarayıcı oturumları arasında sürekli olarak indirilmeye devam etmesi gerektiğine inanıyorum, ancak eğer bu değilse, bu en temiz fikir olabilir (eğer tarayıcılar gerektiğinde blobun dosyada kalmasını sağlıyorsa). –