我想创建一个拖放框,其中可以拖动图片文件进行上传。这在Chrome和Edge中运行良好。但是,我在Firefox和IE 11中遇到了麻烦。例如,在IE 11中,当我点击浏览按钮时,弹出一个窗口,标题为“选择要上传的文件”。如果我点击一个图像并点击“打开”,它可以正常工作,但我无法将任何文件拖出窗口。但是,如果我打开我的文件资源管理器,我可以从文件资源管理器窗口中拖放图像。类似的事情发生在Firefox。我可以从文件浏览器中拖动图像,但是当我尝试从标题为“文件上传”的弹出窗口拖动时,我会看到带有圆圈和红色斜线的幻影图像。这里的一些线程已经建议使用dragstart函数,但这似乎并不奏效,可能是因为文档中提到“请注意,从OS拖动文件到浏览器时,dragstart和dragend事件不会被触发。” https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API在IE11和Firefox中拖放文件
那么有没有一种方法可以在这些浏览器中从文件上传窗口拖动文件,而不必打开文件资源管理器?再次,我可以从Chrome和Edge中的弹出窗口拖放。
这里是我的HTML:
Files: <input type="file" id="fileInput" name="files" multiple><br />
<div id="selectedFiles"></div>
<div class="picList">
<div id="dropbox" style="border:1px solid black;height:500px;">
Drop Here
</div>
</div>
这里是我的javascript:
dropbox = document.getElementById("dropbox");
dropbox.addEventListener("dragenter", dragenter, false);
dropbox.addEventListener("dragover", dragover, false);
dropbox.addEventListener("drop", drop, false);
function dragenter(e) {
e.stopPropagation();
e.preventDefault();
}
function dragover(e) {
e.stopPropagation();
e.preventDefault();
}
function drop(e) {
e.stopPropagation();
e.preventDefault();
var dt = e.dataTransfer;
var files = dt.files;
handleFiles(files);
}
有什么建议?
编辑:
这里是我的handleFiles功能(dupCheck是一个数组重复检查和存储的文件是文件的数组要上传,我需要,因为我希望用户能够删除文件通过删除预览图像和HTML的FileReader是只读的,所以我不能直接从文件堆栈中删除单个图像):
function handleFiles(files) {
for (var i = 0; i < files.length; i++) {
var file = files[i];
var imageType = /^image\//;
if (!imageType.test(file.type)) {
continue;
}
var img = document.createElement("img");
img.classList.add("obj");
img.file = file;
$(img).addClass('selFile');
$(img).attr('data-file', file.name);
var A = [];
for (var z = 0; z < dupCheck.length; z++) {
A.push(dupCheck[z].name)
}
if (!A.includes(file.name)) {
storedFiles.push(file);
var _checker = { name: file.name };
dupCheck.push(_checker);
dropbox.appendChild(img);
var reader = new FileReader();
reader.onload = (function (aImg) { return function (e) { aImg.src = e.target.result; }; })(img);
reader.readAsDataURL(file);
A = [];
};
}
}
考虑使用库。这是我写的一个。 https://github.com/Pamblam/fileUpload –
很酷。我会看一看。 – Pennywise
你可以在问题中包含'handleFiles'的文本吗? – guest271314