Chrome中拖拽多文件直接下载的实现问题求助
Chrome中拖拽多文件直接下载的实现问题求助
我最近在做一个功能,想让用户能拖拽多个文件到桌面直接下载,单个文件拖拽的时候完全正常,但多文件一起拖就不管用了,折腾了好几种方法都没搞定,来求助大家!
我已经尝试过的方法:
给每个文件单独设置
dataTransfer.setData("DownloadURL", ...)
单个文件完全正常,但多文件的时候只会下载其中一个,显然行不通。用换行分隔多个DownloadURL值
查了些资料说可以把多个文件的DownloadURL用换行拼在一起,代码是这样的:
event.dataTransfer.setData("DownloadURL", "application/pdf:file1.pdf:https://example.com/file1.pdf\napplication/pdf:file2.pdf:https://example.com/file2.pdf");
结果Chrome直接提示“文件不可用”,完全没效果。
- 改用
dataTransfer.items.add()
试着用event.dataTransfer.items.add()动态添加文件,但这个方法好像不支持触发下载,完全没反应。
我的实现代码:
document.addEventListener("dragstart", function (event) { let draggedFiles = document.querySelectorAll(".files-a[data-selected='1']"); if (draggedFiles.length === 0) { let singleFile = event.target.closest(".files-a"); if (singleFile) { draggedFiles = [singleFile]; // Convert single file to an array } } else { draggedFiles = Array.from(draggedFiles); // Convert NodeList to an array } if (draggedFiles.length > 0) { console.log("Dragging multiple files:", draggedFiles); let downloadLinks = draggedFiles.map(file => { let fileUrl = file.getAttribute("href"); let fileName = file.getAttribute("data-name") || fileUrl.split('/').pop(); let mimeType = getMimeType(fileUrl); return `${mimeType}:${fileName}:${window.location.origin + "/priloge/" + fileUrl}`; }).join("\n"); // Attempt to set multiple files event.dataTransfer.setData("DownloadURL", downloadLinks); } });
想请教大家的问题:
- Chrome里到底能不能实现多文件拖拽到桌面直接下载?
- 有没有什么变通方法能触发多文件的拖拽下载?
- 有没有浏览器支持用换行分隔的DownloadURL多文件下载,还是说这是个硬性限制?
我主要在Chrome里测试,不过其他浏览器的情况也想了解,求各位大佬帮忙!🚀
备注:内容来源于stack exchange,提问作者Sandi Horvat
相关产品推荐
相关产品推荐

