Với API tệp mới trong Javascript, bạn có thể đọc tệp trong Javascript để tạo dataURL để hiển thị ảnh khách hàng bên cạnh. Tôi tự hỏi nếu bạn có thể tiếp cận đối tượng File trong callback tải của FileReader. tôi sẽ minh họa điều này bằng một ví dụ:API tệp HTML5: nhận đối tượng Tệp trong FileReader gọi lại
var div = document.createElement('div'); div.ondrop = function(e) { e.preventDefault(); e.stopPropagation(); var files = e.dataTransfer.files; for (var i=0; i<files.length; i++) { var file = files[i]; // this is the file I want!! var filereader = new FileReader(); filereader.onload = function(e) { this; // the FileReader object e.target; // the same FileReader object this.result; // the dataURL, something like data:image/jpeg;base64,..... var img = document.createElement('img'); img.src = this.result; img.title = file.fileName; // This won't be working document.appendChild(img); } } return false; }
gì tôi có thể làm - những gì tôi làm ngay bây giờ - là quấn các nội dung của vòng lặp for trong một chức năng và thực hiện nó để tạo ra một phạm vi mới và giữ một tập tin trong phạm vi đó như vậy:
for (var i=0; i<files.length; i++) { var _file = files[i]; // this is the file I want!! (function(file) { // do FileReader stuff here })(_file); }
Tôi đã tự hỏi ... Có thể tôi đang thiếu thứ gì đó. Có cách nào để lấy đối tượng File từ bên trong hàm onload của FileReader không? Cả hai this
và e.target
là đối tượng FileReader chứ không phải là Tệp. Có điều gì trong số this
hoặc e
đó là Tệp ?? Tôi không thể tìm thấy nó :(
Cảm ơn bó
PS Một fiddle:... http://jsfiddle.net/rudiedirkx/ZWMRd/1/
Đây là những gì tôi sử dụng ngay bây giờ (và đã được sử dụng một thời gian): http://js1.hotblocks.nl - javascript: http://js1.hotblocks.nl/tests/ajax/fdd.js - Vẫn đang sử dụng mã trong câu trả lời của tôi. Và nó hoạt động. Không có sự đóng cửa (xấu xí). (Nó được nhận xét với '//'.) – Rudie
Nếu bạn thích Javascript, bạn có thể sử dụng (bất kỳ phần nào của nó). Tôi tò mò về cách webworkers có thể đóng một vai trò trong việc này (sử dụng webworkers cho callbacks tải hình ảnh để đọc và hiển thị chúng trước khi tải lên) – Rudie
Tôi bỏ lỡ việc gán 'filereader.file = file;'. Cảm ơn bạn đã chỉ ra giải pháp này –