我在JS(AJAX POST)中设置了一个拖放文件上传脚本,我在Safari中过滤文件夹时遇到了困难 - 版本5.0.3(6533.19.4)。
每当我将多个文件/文件夹放入浏览器时,Chrome都会过滤掉这些文件夹,Firefox会为.size
返回0,因此防止这些情况变得微不足道。
但是,Safari将返回一个68字节的文件(文件夹的大小)。
有没有办法测试此File
({1}}中的项目)是否为文件夹?
似乎无法在File/Blob API中找到测试此条件的任何内容(尝试FileList
时没有意义,因为它不会为未知文件和文件夹返回任何内容......)
更多信息:
基本上发生的事情是AJAX请求有一个空体。我正在上传.type
:
FormData
答案 0 :(得分:0)
您可以使用原始发布数据检测服务器上的文件或文件夹: Get raw post data
我注意到文件夹在开头只有表格边界而在结尾处没有。所以基本上看起来浏览器开始做帖子然后在完成请求之前停止。 (我只用safari测试过这个,但我猜它和其他浏览器一样。)
您可以在会话中保存失败的上传,然后使用AJAX来测试失败的上传是否产生了这样的请求。你有一个aditional AJAX请求,但至少你可以检测到它。这是我到目前为止找到的最佳选择。
答案 1 :(得分:0)
我们可以使用FileReader
读取文件。代码可以是这样的:
Array.prototype.forEach.call(e.dataTransfer.files, function (file) {
var reader = new FileReader();
reader.onload = function (event) {
// it's a file
addFile(file);
};
reader.onerror = function (event) {
alert("Uploading folders not supported in Safari");
}
reader.readAsDataURL(file);
});
对于文件夹,它会给出错误:
Failed to load resource: The operation couldn’t be completed. (WebKitBlobResource error 4.)
答案 2 :(得分:-2)
为什么不检查oldschool文件后缀?应该适用于“file.suf”是文件而“文件”是文件夹的大多数情况......