使用 Javascript Dropbox v2 API 时如何获取传输状态
How to get the transfer status when using the Javascript Dropbox v2 API
我在 Javascript 上使用 Dropbox V2 API,我想获得某种状态更新,了解下载或上传的进度 -- 有多少数据目前已传输的文件占上传文件总大小的百分比。
遗憾的是,Dropbox API v2 JavaScript SDK 不提供跟踪进度信息的方法,但我们会将其视为功能请求。
不确定您是否希望在 browser / node.js 端解决此问题,但这里有一个示例如何在 node.js:
输出:
1% downloaded
5% downloaded
7% downloaded
40% downloaded
54% downloaded
90% downloaded
file downloaded!
100% downloaded
来源:
/**
* To run example you have to create 'credentials.json' file
* in current location.
*
* File should contain JSON object, with 'TOKEN' property.
*/
const dropboxV2Api = require('dropbox-v2-api');
const progress = require('progress-stream');
const fs = require('fs');
const path = require('path');
const credentials = JSON.parse(fs.readFileSync(path.join(__dirname, 'credentials.json')));
//set token authentication:
const dropbox = dropboxV2Api.authenticate({
token: credentials.TOKEN
});
const FILE_PATH = '/dropbox/file.txt';
getSizeByFilePath(FILE_PATH, (err, fileSize) => {
if(err) return console.log(err);
getFileStream(FILE_PATH)
.pipe(getProgresStreamByFileSize(fileSize))
.pipe(fs.createWriteStream('.' + FILE_PATH));
});
function getProgresStreamByFileSize(fileSize) {
const progressStream = progress({
length: fileSize,
time: 100 // print progress each 100 ms
});
progressStream.on('progress', function(progress) {
const percentage = parseInt(progress.percentage, 10)+'%';
console.log(`${percentage} downloaded`);
});
return progressStream;
}
function getFileStream(filePath) {
return dropbox({
resource: 'files/download',
parameters: {
path: filePath
}
}, (err, result) => {
if(err) return console.log(err);
console.log('file downloaded!')
});
}
function getSizeByFilePath(filePath, cb) {
dropbox({
resource: 'files/alpha/get_metadata',
parameters: {
'path': filePath,
'include_media_info': false,
'include_deleted': false,
'include_has_explicit_shared_members': false
}
}, (err, result) => {
if(err) return cb(err);
cb(null, result.size);
});
}
以下包:progress-stream and dropbox-v2-api 本示例中使用。
我在 Javascript 上使用 Dropbox V2 API,我想获得某种状态更新,了解下载或上传的进度 -- 有多少数据目前已传输的文件占上传文件总大小的百分比。
遗憾的是,Dropbox API v2 JavaScript SDK 不提供跟踪进度信息的方法,但我们会将其视为功能请求。
不确定您是否希望在 browser / node.js 端解决此问题,但这里有一个示例如何在 node.js:
输出:
1% downloaded
5% downloaded
7% downloaded
40% downloaded
54% downloaded
90% downloaded
file downloaded!
100% downloaded
来源:
/**
* To run example you have to create 'credentials.json' file
* in current location.
*
* File should contain JSON object, with 'TOKEN' property.
*/
const dropboxV2Api = require('dropbox-v2-api');
const progress = require('progress-stream');
const fs = require('fs');
const path = require('path');
const credentials = JSON.parse(fs.readFileSync(path.join(__dirname, 'credentials.json')));
//set token authentication:
const dropbox = dropboxV2Api.authenticate({
token: credentials.TOKEN
});
const FILE_PATH = '/dropbox/file.txt';
getSizeByFilePath(FILE_PATH, (err, fileSize) => {
if(err) return console.log(err);
getFileStream(FILE_PATH)
.pipe(getProgresStreamByFileSize(fileSize))
.pipe(fs.createWriteStream('.' + FILE_PATH));
});
function getProgresStreamByFileSize(fileSize) {
const progressStream = progress({
length: fileSize,
time: 100 // print progress each 100 ms
});
progressStream.on('progress', function(progress) {
const percentage = parseInt(progress.percentage, 10)+'%';
console.log(`${percentage} downloaded`);
});
return progressStream;
}
function getFileStream(filePath) {
return dropbox({
resource: 'files/download',
parameters: {
path: filePath
}
}, (err, result) => {
if(err) return console.log(err);
console.log('file downloaded!')
});
}
function getSizeByFilePath(filePath, cb) {
dropbox({
resource: 'files/alpha/get_metadata',
parameters: {
'path': filePath,
'include_media_info': false,
'include_deleted': false,
'include_has_explicit_shared_members': false
}
}, (err, result) => {
if(err) return cb(err);
cb(null, result.size);
});
}
以下包:progress-stream and dropbox-v2-api 本示例中使用。