JavaScript从FileList删除要上载的文件 [英] JavaScript delete File from FileList to be uploaded
问题描述
有代码 https://jsfiddle.net/bfzmm1hc/1 一切都很好但是我想从集合中删除一些文件。
There is the code https://jsfiddle.net/bfzmm1hc/1 Everything looks fine but I want to delete some of the files from the set.
我已经找到了这些:
- How to remove one specific selected file from input file control
- input type=file multiple, delete items
我知道 FileList
object是readonly,所以我可以将文件复制到一个新数组。但是我该怎么处理这个新的 File
对象数组呢?我无法将其分配给文件
属性...
I know that FileList
object is readonly, so I can just copy the files to a new array. But what should I do with this new array of File
objects? I can't assign it to the files
property...
推荐答案
由于您无法编辑只读 input.files
属性,您必须上传表单使用 XMLHttpRequest
并发送 FormData
对象。我还将向您展示如何使用 URL .createObjectURL
更容易从文件
对象获取URI:
Since you cannot edit the Read Only input.files
attribute, you must upload a form using XMLHttpRequest
and send a FormData
object. I will also show you how to use URL.createObjectURL
to more easily get a URI from the File
object:
var SomeCl = {
count: 0,
init: function() {
$('#images').change(this.onInputChange);
},
onInputChange: function() {
// reset preview
$('.container').empty();
// reset count
SomeCl.count = 0;
// process files
SomeCl.processFiles(this.files, function(files) {
// filtered files
console.log(files);
// uncomment this line to upload the filtered files
SomeCl.upload('url', 'POST', $('#upload').get(0), files, 'images[]');
});
},
processFiles: function(files, callback) {
// your filter logic goes here, this is just example
// filtered files
var upload = [];
// limit to first 4 image files
Array.prototype.forEach.call(files, function(file) {
if (file.type.slice(0, 5) === 'image' && upload.length < 4) {
// add file to filter
upload.push(file);
// increment count
SomeCl.count++;
// show preview
SomeCl.preview(file);
}
});
callback(upload);
},
upload: function(method, url, form, files, filename) {
// create a FormData object from the form
var fd = new FormData(form);
// delete the files in the <form> from the FormData
fd.delete(filename);
// add the filtered files instead
fd.append(filename, files);
// demonstrate that the entire form has been attached
for (var key of fd.keys()) {
console.log(key, fd.getAll(key));
}
// use xhr request
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
xhr.addEventListener('progress', function(e) {
console.log('lengthComputable', e.lengthComputable);
console.log(e.loaded + '/' + e.total);
});
xhr.addEventListener('load', function(e) {
console.log('uploaded');
});
xhr.addEventListener('error', function(e) {
console.log('this is just a demo');
});
xhr.send(fd);
},
preview: function(file) {
// create a temporary URI from the File
var url = URL.createObjectURL(file);
// append a preview
$('.container').append($('<img/>').attr('src', url));
}
};
SomeCl.init();
.container img {
max-width: 250px;
max-height: 250px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="upload">
<input name="other" type="hidden" value="something else">
<input name="images[]" id="images" multiple="multiple" type="file">
<div class="container"></div>
</form>
这篇关于JavaScript从FileList删除要上载的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!