使用JQuery通过AJAX从OneDrive上传文件时出错

时间:2017-10-10 15:06:40

标签: javascript jquery ajax file-upload

我在创建拖放文件上传界面时遇到了一些麻烦 - 它适用于本地文件,但是当我尝试从资源管理器中的OneDrive拖动到“删除”按钮时区域,控制台报告net: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');
});

提前感谢您的任何帮助或建议!

1 个答案:

答案 0 :(得分:0)

看起来OneDrive在本地存储文件确实存在问题。这是一个例子:

Online-only vs Available offline

在上面的示例中,顶级文件(可离线使用)上传正常,下面的文件没有。

据我所知,无法通过拖放上传仅限在线文件(或者至少不使用与上述方法类似的代码)。相反,您需要input type="file"才能执行此操作(Windows会自动在本地下载文件以准备上传)。

用户可以右键单击文件并选择“脱机使用”,以解决这些文件的问题。

我在Google云端硬盘上测试了相同的文件,但同样的问题也出现了。如果谷歌不能这样做,那么我不太可能这样做,但如果有其他人找到解决方案,请在下面发布你的答案,我会非常高兴接受这一点