const Koa = require('koa');
const Router = require('koa-router');
const OSS = require('ali-oss');
const app = new Koa();
const router = new Router();
const client = new OSS({
accessKeyId: 'your-access-key-id',
accessKeySecret: 'your-access-key-secret',
bucket: 'your-bucket',
region: 'oss-cn-hangzhou'
});
router.post('/upload', async ctx => {
const file = ctx.request.files.file;
const name = file.name;
const result = await client.put(name, file.path);
let url = client.signatureUrl('GET', name);
// 设置Options配置自定义预览
const options = {
expires: 60, // 60s后预览URL过期
response: {
'content-type': 'text/html'
}
};
previewUrl = client.getSignedUrl('GET', name, options);
ctx.body = {
message: 'success',
url,
previewUrl
};
});
app.use(router.routes());
app.listen(3000);
- 使用Koa的ctx.request.files获取上传的文件
- 使用ali-oss Node.js SDK将文件上传至OSS,并获取文件URL和预览URL
- OSS预览通过GET请求携带特定options进行,可以指定预览内容类型等
- 将OSS文件URL和预览URL响应给客户端
客户端可以直接通过预览URL在浏览器中预览上传的文件。
在OSS Node.js SDK的client.put方法中,可以传入的参数有:
- name:必填,上传文件在OSS上的名称,可包含目录。例如:‘folder/file.txt’
- file:必填,File对象或文件路径,表示要上传的文件。例如:
- fs.createReadStream(‘local-file’)
- ‘/local/file’
- ctx.request.files.file (Koa文件上传中的file对象)
- options:可选,上传选项配置,支持:
- headers:自定义HTTP头部
- contentType:指定内容类型,默认为文件的mime类型
- progression:进度事件回调
- checkpoint:断点续传配置
- tagging:指定文件标签
- metadata:文件元数据
- storageClass:存储类型,如’STANDARD’,‘STANDARD_IA’,‘ARCHIVE’
- acl:访问控制列表,如’private’,‘public-read’
- serverSideEncryption:服务端加密配置
例如:
const options = {
headers: { ... },
contentType: 'text/plain',
progression: () => {},
storageClass: 'STANDARD_IA'
};
client.put(name, file, options);
所以,client.put方法共有三个参数:
- name:String,上传后的文件名称
- file:File对象|String,要上传的文件
- options:Object,上传选项配置
通过定制这三个参数,您可以实现各种文件上传需求,如处理大文件、断点续传、设置访问权限、加密文件等。