-
Notifications
You must be signed in to change notification settings - Fork 1
Step2
techird edited this page Apr 6, 2016
·
1 revision
本步骤完整源码在 workflow/step-2 分支上,提交记录为
c9709ee
腾讯云对象存储服务(COS),适用于静态文件的存储。存储的静态文件会提供 CDN 加速,保障访问可靠性和速度。
在上一步中,我们已经把文件存储到了本地临时目录,在这一步,我们将要把它上传到 COS 服务中。
腾讯云提供了 COS 服务的 Node SDK,我们可以通过 npm
进行安装:
npm instal qcloud_cos --save
基于 SDK 提供的 cos.upload()
方法,我们封装好项目使用的版本。
// lib/cos.js
'use strict';
const qcloud = require("qcloud_cos");
const conf = qcloud.conf;
const cos = qcloud.cos;
const appId = "10028115";
const secretId = "AKID3vtUR9S5SUFuM0uNW9T9gIpX3gDcZ4fA";
const secretKey = "hH9mBkzjWDwSGcDfzLJPTScCJ7uIWaTl";
conf.setAppInfo(appId, secretId, secretKey);
/**
* @method upload()
*
* 上传文件到 COS 服务
*
* @param {string} filePath 要上传到 COS 的本地文件路径
* @param {string} bucketName 指定上传到 COS 的目标 bucket
* @param {string} destPath 指定上传到 Bucket 下的指定路径
* @param {string} bizAttr 文件的额外信息
* @param {Function(result)} callback 上传完成的回掉
*/
exports.upload = function(filePath, bucketName, dstPath, bizAttr, callback) {
cos.upload(filePath, bucketName, dstPath, bizAttr, callback);
};
注意:要使用腾讯云 SDK,您需要获取应用的
appId
、secretId
、secrectKey
,这些信息可以在腾讯云 COS 的控制台上点击「获取 API 密钥」按钮获取。
此时,COS 的上传方法准备完成,我们修改 Step1 中的上传流程,在文件保存到本地后,把本地文件上传到 COS 服务中。
// handle/upload.js
const path = require("path");
const fs = require("fs");
const cos = require('../lib/cos');
function upload(request, response) {
// ...(省略 processUpload 部分)
processUpload(request, response, uploadToServer);
function uploadToServer(uploadError) {
// ...
// 此时文件已经上传到服务器本地,并且文件信息保存在 file 中
console.log("#1. File uploaded to server:");
console.log(JSON.stringify(file, null, 4));
uploadToCos(file);
}
function uploadToCos(file) {
// upload file to cos
const uploadPath = `/uploads/${file.filename}${path.extname(file.originalname)}`;
cos.upload(file.path, 'image', uploadPath, file.filename, (cosResult) => {
console.log("#2. File uploaded to cos:");
console.log(JSON.stringify(cosResult, null, 4));
// upload to cos error
if (cosResult.code) {
print({ cosError: cosResult });
return;
}
// clean up local store
fs.unlink(file.path);
print({ file, cosResult });
});
}
}
此时使用 Postman 上传文件,可以看到服务器输出:
同时,服务器日志(pm2 logs
)也输出如下。
#2. File uploaded to cos:
{
"httpcode": 200,
"code": 0,
"message": "成功",
"data": {
"access_url": "http://image-10028115.file.myqcloud.com/uploads/0070468356c9dad63945ae5eca5e6914.png",
"resource_path": "/uploads/0070468356c9dad63945ae5eca5e6914.png",
"source_url": "http://image-10028115.cos.myqcloud.com/uploads/0070468356c9dad63945ae5eca5e6914.png",
"url": "http://web.file.myqcloud.com/files/v1/uploads/0070468356c9dad63945ae5eca5e6914.png"
}
}
可以看到,输出的 cosResult
包含了文件在 COS 服务器的相关信息,该信息将在下一步进一步使用。
同时,在文件上传到 COS 服务之后,上面的代码也把本地的文件删除,避免不必要的存储。