Tôi đang làm việc với API tùy chỉnh để cho phép người dùng tải lên tệp (có kích thước tùy ý). Nếu tập tin lớn, nó sẽ được chunkfied, và xử lý trong nhiều yêu cầu đến máy chủ.Phương thức HTML5 File.slice thực sự đang làm gì?
Tôi đang viết mã sử dụng File
và FileReader
(HTML5) theo nhiều ví dụ từ trực tuyến. Nói chung (từ những gì tôi đọc trên mạng) cho một chuyển tập tin chunkfied, đầu tiên mọi người sẽ nhận được một blob dữ liệu từ đối tượng tập tin của họ
var file = $('input[type=file]')[0].files[0];
var blob = file.slice(start,end)
Sau đó sử dụng một FileReader
để đọc blob readAsArrayBuffer(blob)
hoặc readAsBinaryString(blob)
Và cuối cùng trong phương thức FileReader.onload(e)
, gửi dữ liệu đến máy chủ. Lặp lại quá trình này cho tất cả các khối trong tập tin.
Câu hỏi của tôi là
Tại sao tôi cần phải sử dụng một FileReader
? Nếu tôi không sử dụng nó, và chỉ cần gửi các đốm màu với File.slice
, có bất kỳ đảm bảo rằng hoạt động cắt sẽ được thực hiện trước khi tôi cố gắng gửi dữ liệu trong mỗi yêu cầu. Đối tượng File
có tải toàn bộ tệp khi được tạo (chắc chắn không?). File.slice
tìm đến vị trí được quy định bởi các tham số, và sau đó đọc thông tin trong? Tài liệu không cung cấp cho tôi manh mối về cách nó được triển khai.
Cảm ơn bạn đã xác định Tệp cho tôi, điều đó có ý nghĩa hơn nhiều. Tuy nhiên, nếu tôi vẫn sử dụng File.Slice (trả về một blob), và sau đó thử gửi blob đó đến máy chủ bằng cách sử dụng XMLHttpRequest.send (myBlob), dữ liệu được lấy ra từ tệp đó như thế nào và khi nào được cung cấp cho máy chủ . Hoặc điều này sẽ thất bại/không gửi bất kỳ dữ liệu nào? - – Ponml
Tôi đã cập nhật câu trả lời của mình để cung cấp thêm một chút chi tiết. Tôi đã tham gia vào công cụ này khá sâu sắc khi tôi đang viết tiện ích rsync javascript của mình: https://github.com/claytongulick/bit-sync –