办理题目:直接由用户上传文件至阿里云OSS,而非颠末中间件/后端
官方文档:分片上传 (aliyun.com)
在官方文档中,提供的方法是由中间件上传至oss,调用了path库,但是在浏览器用户没有那么大的权限,我们关注到文档中此表:
类型参数说明必选参数name {String}Object完整路径,Object完整路径中不能包罗Bucket名称。file {String|File}表现文件路径或者HTML5文件。 在必选参数中除了提供path,还可以提供HTML5文件,也就是我们常说的file。
给出如下办理:
- const OSS = require('ali-oss');
- const path = require("path");
- let elm = document.getElementById('fileInput')
- uploadFile = null
- elm.onchange = function (e) {
- let files = e.target.files
- let uploadFile = files[0]
- let render = new FileReader()
- const client = new OSS({
- // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
- region: 'yourRegion',
- // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
- accessKeyId: 'yourAccessKeyId',
- accessKeySecret: 'yourAccessKeySecret',
- // 填写Bucket名称,例如examplebucket。
- bucket: 'examplebucket',
- });
- const progress = (p, _checkpoint) => {
- // Object的上传进度。
- console.log(p);
- // 分片上传的断点信息。
- console.log(_checkpoint);
- };
- const headers = {
- // 指定Object的存储类型。
- 'x-oss-storage-class': 'Standard',
- // 指定Object标签,可同时设置多个标签。
- 'x-oss-tagging': 'Tag1=1&Tag2=2',
- // 指定初始化分片上传时是否覆盖同名Object。此处设置为true,表示禁止覆盖同名Object。
- 'x-oss-forbid-overwrite': 'true'
- }
- async function multipartUpload() {
- try {
- const result = await client.multipartUpload('exampledir/exampleobject.txt', uploadFile, {
- progress,
- meta: {
- year: 2020,
- people: 'test',
- },
- });
- console.log(result);
- const head = await client.head('exampledir/exampleobject.txt');
- console.log(head);
- } catch (e) {
- if (e.code === 'ConnectionTimeoutError') {
- console.log('TimeoutError');
- // do ConnectionTimeoutError operation
- }
- console.log(e);
- }
- }
- multipartUpload();
复制代码 之后调用multipartUpload()即可。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |