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

问题描述:

我在创建拖放文件上传界面时遇到了一些麻烦 - 它对本地文件非常适用,但是当我尝试从资源管理器中的OneDrive拖动到“下降“区域,控制台报告一个net:ERR_FAILED使用JQuery通过AJAX从OneDrive上传文件时出错

在某些情况下,是否无法从非本地文件进行拖放操作?如果是这样的话,什么样的限制适用?例如,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不在本地存储文件的问题。这里有一个例子:

Online-only vs Available offline

在上面的例子中顶部文件(可离线)上传的罚款和下面的一个都没有。

据我所知,没有办法通过拖放方式上传一个仅在线文件(或者至少不能用类似于上述方法的代码)。相反,您需要input type="file"才能完成此操作(并且Windows会自动在本地下载文件以准备上传)。

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

我已经在Google云端硬盘上测试过相同的文件,并发生同样的问题。如果谷歌无法做到这一点,那么我不太可能做到这一点,但如果其他人发现了解决方案,请在下面发布您的答案,我会非常乐意接受。