2017-08-01 197 views
1

我使用dropbox API從node.js文件結構讀取文件,然後將該文件上傳到保管箱文件夾中。Dropbox API - 文件讀取和上傳node.js

文件被上傳,但其上傳文件的大小爲0字節

var path = require("path"); 
var temp_dir = path.join(process.cwd(), 'pdf/'); 

if (!fs.existsSync(temp_dir)) 
    fs.mkdirSync(temp_dir); 
    fs.readFile(temp_dir + 'report.pdf', function read(err, data) { 
     if (err) { 
      throw err; 
     } 

    fileupload(data); 
    }); 

文件上傳代碼:

function fileupload(name, content) { 
    request.put('https://api-content.dropbox.com/1/files_put/auto/my_reports/report.pdf', { 
       headers: { 
        Authorization: 'TOKEN HERE', 
        'Content-Type': 'application/pdf' 
       }, 
       body: content 
      }, function optionalCallback(err, httpResponse, bodymsg) { 
       if (err) { 
        console.log(err); 
       } 
       else { 
        console.log("File uploaded to dropbox successfully!"); 
        fs.unlink(temp_dir + 'report.pdf', function(err) { 
         if (err) 
          throw err; 
         else { 
          console.log("file deleted from server!"); 
         } 
        }) 
        request.post('https://api.dropboxapi.com/1/shares/auto/MY_reports/report.pdf' + '?short_url=false', { 
         headers: { 
          Authorization: 'TOKEN HERE' 
         } 
        }, function optionalCallback(err, httpResponse, bodymsg) { 
         if (err) { 
          console.log(err); 
         } 
         else { 
          console.log('Shared link 2 ' + JSON.parse(httpResponse.body).url); 

         } 
        }); 

       } 
      }); 
     } 

中的Dropbox上傳的文件:

enter image description here

回答

0

fileupload有兩個參數:namecontent,但你只有通過一個參數。這意味着contentundefined,這就是您上傳空文件的原因。

因爲你沒有實際使用name,單從fileupload定義中刪除該參數:

function fileupload(content) { 
    ... 

請注意

您使用的Dropbox API 1,而這已被否決了一年前,並且是due to be turned off soon。您應該切換到API v2

+0

太好了!這工作。感謝您的有用信息! – Skywalker

0

你可以使用我的小Dropbox的V2 API包裝(dropbox-v2-api)迅速上傳您的文件:

const dropboxUploadStream = dropbox({ 
    resource: 'files/upload', 
    parameters: { 
     path: '/MY_reports/report.pdf' 
    } 
}, (err, result) => { 
    //upload completed 
}); 

fs.createReadStream(temp_dir + 'report.pdf').pipe(dropboxUploadStream); 
+0

嗨,我試圖使用你的庫,但我似乎可以使它的工作。當我'console.log(result)'我得到'undefined'並且文件沒有上傳。你能幫我嗎? – Skywalker

+0

@Skywalker請確認: 1.您已經過認證,或者 2.該流有效 –

+0

嗨。這是認證。我如何檢查流是否有效。我複製粘貼你的github頁面上的例子的代碼。 – Skywalker