javascript – Dropbox直接从浏览器上传文件

前端之家收集整理的这篇文章主要介绍了javascript – Dropbox直接从浏览器上传文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图将文件直接上传到dropBox [来自浏览器/网络应用程序],代码API上的“uploadFile”函数需要在服务器上上传文件,这给我带来了麻烦,因为我不想要任何要上传到我的服务器并从那里到dropBox文件.

  1. $f = fopen("test.jpg","rb"); // requires file on server
  2. $result = $dbxClient->uploadFile("test.jpg",dbx\WriteMode::add(),$f);
  3. fclose($f);

试过这个https://github.com/dropbox/dropbox-js很失望地说没有明确的文档,文档部分的许多链接都被打破了.

我需要将文件上传到我的帐户,客户端无需登录到DropBox.

任何指针都会非常感激.寻找Ajax / JavaScript方法.

更新

我尝试了以下内容,但没有来自DropBox回复

HTML

JavaScript的

  1. var doUpload = function(event){
  2. var input = event.target;
  3. var reader = new FileReader();
  4. reader.onload = function(){
  5. var arrayBuffer = reader.result;
  6. $.ajax({
  7. url: "https://api-content.dropBox.com/1/files_put/auto/uploads/" + input.files[0].name,headers: {
  8. Authorization: 'Bearer ' + MyAccessToken,contentLength: file.size
  9. },crossDomain: true,crossOrigin: true,type: 'PUT',contentType: input.files[0].type,data: arrayBuffer,dataType: 'json',processData: false,success : function(result) {
  10. $('#uploadResults').html(result);
  11. }
  12. });
  13. }
  14. reader.readAsArrayBuffer(input.files[0]);
  15. }
最佳答案
DropBox刚刚发布了一个博客,其中包含如何执行此操作的说明.你可以在https://blogs.dropbox.com/developers/2016/03/how-formio-uses-dropbox-as-a-file-backend-for-javascript-apps/找到它(完全披露,我写了博客文章.)

以下是如何上传文件.

  1. /**
  2. * Two variables should already be set.
  3. * dropBoxToken = OAuth token received then signing in with OAuth.
  4. * file = file object selected in the file widget.
  5. */
  6. var xhr = new XMLHttpRequest();
  7. xhr.upload.onprogress = function(evt) {
  8. var percentComplete = parseInt(100.0 * evt.loaded / evt.total);
  9. // Upload in progress. Do something here with the percent complete.
  10. };
  11. xhr.onload = function() {
  12. if (xhr.status === 200) {
  13. var fileInfo = JSON.parse(xhr.response);
  14. // Upload succeeded. Do something here with the file info.
  15. }
  16. else {
  17. var errorMessage = xhr.response || 'Unable to upload file';
  18. // Upload Failed. Do something here with the error.
  19. }
  20. };
  21. xhr.open('POST','https://content.dropBoxapi.com/2/files/upload');
  22. xhr.setRequestHeader('Authorization','Bearer ' + dropBoxToken);
  23. xhr.setRequestHeader('Content-Type','application/octet-stream');
  24. xhr.setRequestHeader('DropBox-API-Arg',JSON.stringify({
  25. path: '/' + file.name,mode: 'add',autorename: true,mute: false
  26. }));
  27. xhr.send(file);

然后从dropBox下载文件执行此操作.

  1. var downloadFile = function(evt,file) {
  2. evt.preventDefault();
  3. var xhr = new XMLHttpRequest();
  4. xhr.responseType = 'arraybuffer';
  5. xhr.onload = function() {
  6. if (xhr.status === 200) {
  7. var blob = new Blob([xhr.response],{type: application/octet-stream’});
  8. FileSaver.saveAs(blob,file.name,true);
  9. }
  10. else {
  11. var errorMessage = xhr.response || 'Unable to download file';
  12. // Upload Failed. Do something here with the error.
  13. }
  14. };
  15. xhr.open('POST','https://content.dropBoxapi.com/2/files/download');
  16. xhr.setRequestHeader('Authorization','Bearer ' + dropBoxToken);
  17. xhr.setRequestHeader('DropBox-API-Arg',JSON.stringify({
  18. path: file.path_lower
  19. }));
  20. xhr.send();
  21. }

FileSaver和Blob不适用于旧版浏览器,因此您可以为它们添加变通方法.

正如其他答案所述,每个上传或下载文件的会话都需要访问DropBox令牌.将其他人的令牌发送给用户是一个安全问题,因为拥有令牌将使他们完全控制保管箱帐户.实现这项工作的唯一方法是让每个人通过DropBox进行身份验证并获取自己的令牌.

Form.io,我们已经在我们的平台上实现了身份验证和上传/下载.这使得使用dropBox作为文件后端构建Web应用程序非常容易.

猜你在找的jQuery相关文章