2013-03-07 20 views
6

tôi cần phải lưu trữ rất nhiều văn bản trong WebSQL, vì vậy tôi đã quyết định để nén các văn bản với zip.js và lưu trữ nén Blobsjavascript - zip một Blob với zip.js

Từ các tài liệu bạn có thể nén một blob như sau

function zipBlob(filename, blob, callback) { 
    // use a zip.BlobWriter object to write zipped data into a Blob object 
    zip.createWriter(new zip.BlobWriter("application/zip"), function(zipWriter) { 
     // use a BlobReader object to read the data stored into blob variable 
     zipWriter.add(filename, new zip.BlobReader(blob), function() { 
     // close the writer and calls callback function 
     zipWriter.close(callback); 
     }); 
    }, onerror); 
} 

Mặc dù điều này có hiệu quả nhưng tôi không hiểu tại sao bạn cần chỉ định tên tệp. Điều này có thực sự cần thiết không? Và, tệp này có bị xóa sau khi nén không?

Chúc mừng

Trả lời

3

Kiểm tra câu trả lời ở đây - nó không yêu cầu tên tệp và tôi sẽ đặt cược dễ sử dụng hơn nhiều. Tôi đã thử một vài triển khai nén/giải nén javascript và đã bị các vấn đề như giới hạn về kích thước của dữ liệu gốc, tốc độ tổng thể, hiệu quả, v.v. Đó là kỳ quặc khó khăn để tìm một việc thực hiện nén/giải nén tốt trong javascript, nhưng may mắn này đã không thất bại tôi chưa (và tôi đã sử dụng nó khá một chút):

Compressing a blob in javascript

Việc thực hiện bạn có hiện đang yêu cầu tên tệp vì nó đang cố gắng nhất quán với mã zip, để bạn có thể lưu nó vào máy tính để bàn và mở nó bằng tiện ích zip yêu thích của bạn. Có vẻ như thử thách của bạn rất giống với tôi, tôi cần lưu và khôi phục các mục đã nén ra khỏi bộ nhớ cục bộ trong trình duyệt cũng như trên máy chủ.

+0

rất tốt đẹp! Mặc dù quá trình nén không tốt bằng zip.js nhưng vẫn là một lựa chọn rất thú vị !! thnx –

+0

Niềm vui của tôi Jeanluca, vui mừng khi biết rằng nó có thể là một lựa chọn tiềm năng cho bạn. Có, chắc chắn có nhiều trường hợp zip sẽ đi nhiều LZJB thực hiện từ góc độ nén. Trên một số loại dữ liệu, nó sẽ là tương đương; tuy nhiên, nó cực kỳ nhanh và nếu bạn đang thực hiện tốc độ trình duyệt này thường rất quan trọng. Và luôn luôn có lợi ích đó là dễ sử dụng hơn cho nhà phát triển, ít nhất là theo kinh nghiệm của tôi. Ngoài ra còn có một vài phương pháp mã hóa/giải mã base64 ẩn trong đó tôi đã không hiển thị trong phiên bản được sửa đổi một chút trong bài đăng nếu bạn cần chúng. – hoonto

+0

Jeanluca, để lại một lưu ý ở đây cho bạn chỉ trong trường hợp - có một lỗi đánh máy trong ví dụ của tôi trong liên kết đó, thiếu dấu chấm phẩy sau khi khai báo đối tượng fastcompressor ở trên cùng. Vì vậy, chỉ muốn bạn nhận thức được điều đó. Tôi chỉ cố định nó ở đó. – hoonto

2

Tên tệp là cần thiết theo việc triển khai này. Sẽ không cần thiết nếu bạn chỉ nén dữ liệu, nhưng zip.js xây dựng các tệp zip, lưu trữ tệp, phải có tên tệp.

Trong ví dụ ban đầu của bạn, zipWriter.add() chuyển đổi hiệu quả blob của bạn thành tệp mới và thêm nó vào mã zip - và thông số "tên tệp" là tên bạn muốn tệp mới có.

Dưới đây là một ví dụ sử dụng zip.js để thêm nhiều đốm màu để một zip và sau đó tải nó với FileSaver.js:

function zipBlob() { 
    zip.createWriter(new zip.BlobWriter("application/zip"), function(writer) { 
     files = ["abcd", "123"]; 
     var f = 0; 

     function nextFile(f) { 
      fblob = new Blob([files[f]], { type: "text/plain" }); 
      writer.add("file"+f, new zip.BlobReader(fblob), function() { 
       // callback 
       f++; 
       if (f < files.length) { 
        nextFile(f); 
       } else close(); 
      }); 
     } 

     function close() { 
      // close the writer 
      writer.close(function(blob) { 
       // save with FileSaver.js 
       saveAs(blob, "example.zip"); 
      }); 
     } 

     nextFile(f); 

    }, onerror); 
}