我在创建拖放文件上传界面时遇到了一些问题 - 它非常适合本地文件,但是当我尝试从资源管理器中的 OneDrive 拖动到“放置”区域时,控制台会报告 网络:ERR_FAILED
。
在某些情况下是否无法从非本地文件进行拖放操作?如果是这样的话,有什么样的限制?例如,Mac 上的 iCloud 似乎运行良好。
上传者似乎认为这是一个有效的文件,但似乎无法访问它或其他东西。
以防万一它有帮助,这里是相关的代码:
function handleFileUpload(files,obj) {
for (var i = 0; i < files.length; i++) {
var fd = new FormData();
fd.append('file', files[i]);
status.setFileNameSize(files[i].name,files[i].size);
sendFileToServer(fd,status);
}
}
function sendFileToServer(formData,status){
num_uploaded_files++;
checkUploadLimit();
var uploadURL = "uploader.php?request=upload_file"; //Upload URL
var jqXHR=$.ajax({
xhr: function() {
var xhrobj = $.ajaxSettings.xhr();
return xhrobj;
},
url: uploadURL,
type: "POST",
contentType:false,
processData: false,
cache: false,
data: formData,
success: function(data, textStatus, jqXHR){
status.setProcessing();
response = $.parseJSON(data);
if(response.success == 1) {
status.setType(response.file_type);
status.uploadComplete(response.id,response.file_type,response.new_filename);
type = response.file_type;
} else {
status.setFailure(response.failure_reason);
}
},
error: function(jqXHR, textStatus, errorThrown) {
status.setFailure(errorThrown);
}
});
status.setAbort(jqXHR);
}
$( document ).ajaxError(function( event, jqxhr, settings, thrownError ) {
console.log('AJAX error');
});
预先感谢您的任何帮助或建议!
最佳答案
看起来确实是 OneDrive 未在本地存储文件的问题。这是一个例子:
在上面的示例中,顶部文件(可离线使用)上传良好,而下面的文件则不然。
据我所知,无法通过拖放上传仅限在线的文件(或者至少无法使用与上述方法类似的代码)。相反,您需要一个 input type="file"
才能执行此操作(然后 Windows 会自动在本地下载文件以准备上传)。
用户可以右键单击文件并选择“脱机可用”,这样可以解决这些文件的问题。
我在 Google 云端硬盘上测试了相同的文件,并且出现了相同的问题。如果 Google 无法做到这一点,那么我也不太可能做到这一点,但如果其他人找到了解决方案,请在下面发布您的答案,我将非常乐意接受。
关于javascript - 使用 JQuery 通过 AJAX 从 OneDrive 上传文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670092/