【发布时间】:2016-03-27 17:25:58
【问题描述】:
我正在尝试 [从浏览器/Web 应用程序] 将文件直接上传到保管箱,代码 API 上的“uploadFile”功能需要将文件上传到服务器上,这给我带来了麻烦,因为我这样做了不希望将任何文件上传到我的服务器并从那里上传到保管箱。
$f = fopen("test.jpg", "rb"); // requires file on server
$result = $dbxClient->uploadFile("test.jpg", dbx\WriteMode::add(), $f);
fclose($f);
试过这个https://github.com/dropbox/dropbox-js很失望,说没有明确的文档,文档部分的很多链接都坏了。
我需要将文件上传到我的帐户,客户无需登录到保管箱。
任何指针将不胜感激。寻找 Ajax / JavaScript 方法。
更新
我尝试了以下方法,但 Dropbox 没有响应
HTML
<input type="file" name="file" id="file" onchange="doUpload(event)">
JavaScript
var doUpload = function(event){
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
var arrayBuffer = reader.result;
$.ajax({
url: "https://api-content.dropbox.com/1/files_put/auto/uploads/" + input.files[0].name,
headers: {
Authorization: 'Bearer ' + MyAccessToken,
contentLength: file.size
},
crossDomain: true,
crossOrigin: true,
type: 'PUT',
contentType: input.files[0].type,
data: arrayBuffer,
dataType: 'json',
processData: false,
success : function(result) {
$('#uploadResults').html(result);
}
});
}
reader.readAsArrayBuffer(input.files[0]);
}
【问题讨论】:
-
不久前我遇到了 Dropbox API 文档的问题。用户 @smarx 为 Dropbox 工作,并渴望听到用户对文档的看法。
-
这段代码看起来很合理。当您说“Dropbox 没有响应”时,您真的是指对 HTTP 请求没有响应吗? (您可以在浏览器的网络选项卡中查看。)API 返回错误的可能性更大。
-
跳出两个可能的问题:
contentLength是一个虚假的标头名称(尽管我怀疑这会破坏任何东西),除非定义了变量file,否则file.size可能不起作用某处。
标签: javascript jquery dropbox dropbox-api dropbox-sdk-js