上传文件

在MSS中,用户操作的基本数据单元是文件(Object)。MSS js SDK提供了丰富的文件上传接口,可以通过以下方式上传文件:

  • 上传本地文件
  • 流式上传
  • 上传Buffer内容
  • 分片上传
  • 断点上传

流式上传、文件上传的文件(Object)最大不能超过5GB。当文件较大时,请使用分片上传。

上传本地文件

以下代码实现上传指定本地文件:

var MSS = require('mos-mss');
var path = require('path');
var client = new MSS({
    accessKeyId: '<accessKeyId>',
    accessKeySecret: '<accessKeySecret>',
    bucket: 'Bucket'
});

var filePath = path.join(__dirname, './test.json');
var result = client.putObject('ObjectKey', filePath);

result.then(function (res) {
    console.log(res);
});

流式上传

以下代码实现文件流的上传:

var MSS = require('mos-mss');
var path = require('path');
var fs = require('fs');
var client = new MSS({
    accessKeyId: '<accessKeyId>',
    accessKeySecret: '<accessKeySecret>',
    bucket: 'Bucket'
});


var filePath = path.join(__dirname, './test.json');
var stream = fs.createReadStream(filePath);

var result = client.putStream('ObjectKey', stream);
result.then(function (res) {
    console.log(res);
});

上传Buffer内容

您可以通过putObject上传Buffer内容。

var MSS = require('mos-mss');
var client = new MSS({
    accessKeyId: '<accessKeyId>',
    accessKeySecret: '<accessKeySecret>',
    bucket: 'Bucket'
});

var result = client.putObject('ObjectKey', new Buffer('test'));
result.then(function (res) {
    console.log(res);
})

分片上传

对于大文件上传,可以切分成片上传。用户可以在如下的应用场景内(但不仅限于此),使用分片上传(Multipart Upload)模式:

  • 需要支持断点上传。
  • 上传超过100MB大小的文件。
  • 网络条件较差,和MSS的服务器之间的链接经常断开。
var MSS = require('mos-mss');
var path = require('path');
var fs = require('fs');
var client = new MSS({
    accessKeyId: '<accessKeyId>',
    accessKeySecret: '<accessKeySecret>',
    bucket: 'Bucket'
});

var write = function (data) {
    return fs.writeFileSync(path.join(__dirname, './data/checkpoint.txt'), data);
};

var result = client.multipartUpload('ObjectKey', path.join(__dirname, './img/test-big.json'), {
    progress: function (p, checkpoint) {
        write(JSON.stringify(checkpoint));
        console.log('Progress: ' + p);
    }
});

result.then(function (res) {
    console.log(res);
});

取消分片上传事件

该接口可以根据 Upload ID中止对应的Multipart Upload事件。当一个 Multipart Upload 事件被中止后,就不能再使用这个 Upload ID 做任何操作,已经上传的Part数据也会被删除。
调用 closeMultipartUpload 取消分片上传事件:

var MSS = require('mos-mss');
var client = new MSS({
    accessKeyId: '<accessKeyId>',
    accessKeySecret: '<accessKeySecret>',
    bucket: 'Bucket'
});

var result = client.closeMultipartUpload('Bucket', 'UploadId');

result.then(function (res) {
    console.log(JSON.stringify(res));
});

获取所有已上传分片

指定 UploadId 查看所有已经上传成功的分片。 通过下面代码,可以查看一次上传任务已上传的分片:

var MSS = require('mos-mss');
var client = new MSS({
    accessKeyId: '<accessKeyId>',
    accessKeySecret: '<accessKeySecret>',
    bucket: 'Bucket'
});

var result = client.getParts('Bucket', 'UploadId');

result.then(function (res) {
    console.log(JSON.stringify(res));
});

断点上传

在上传文件时会阶段性返回信息,如果上传失败,可以将断点信息存储在本地文件中,例如:checkpoint.txt。上传发生错误后,将保存的 checkpoint 作为参数传递给 multipartUpload,此时将从上次失败的地方继续上传。

var MSS = require('mos-mss');
var path = require('path');
var fs = require('fs');
var client = new MSS({
    accessKeyId: '<accessKeyId>',
    accessKeySecret: '<accessKeySecret>',
    bucket: 'Bucket'
});

var read = function () {
    return fs.readFileSync(path.join(__dirname, './data/checkpoint.txt'), 'utf-8');
};
var checkpoint = JSON.parse(read());

var object = client.multipartUpload('Bucket', path.join(__dirname, './data/test-big.json'), {
    checkpoint: checkpoint,
    progress: function (p, checkpoint) {
        console.log('Progress: ' + p, checkpoint);
    }
});

object.then(function (data) {
    console.log(data);
});