每天学习一点点,成功增加一大步

NodeJS:保存文件流到阿里云的OSS上

NodsJS zhanghui 351℃

近段时间忙着做项目,中间也遇到了一些新的需求,但忙着赶没有时间更新。这次的更新实践过程是将一张在线的图片转存到OSS上,并返回一个上传 OSS 后返回的 OSS 的 URL。因为有时候两家公司是敌对的(比如阿里与腾讯)要想使用对方的在线图片会受影响,这种情况就用到转存了。

主要的依赖:

import * as request from 'request';
import * as OSS from 'ali-oss';
import * as fs from  'fs';

OSS 服务的配置

var client = new OSS({
    region: '',
    accessKeyId: '',
    accessKeySecret: '',
    bucket: '',
    endPoint: 'oss-cn-hangzhou.aliyuncs.com'
});
var ali_oss = {
    bucket: '',
    endPoint: 'oss-cn-hangzhou.aliyuncs.com'
};

主要的处理过程

async function PutOssStream(url: string) {
    try {
        // 要创建的文件名
        var filename = Date.now() + ".jpg";
        // 本地缓存的文件名
        var localFile = filename;
        // 创建写入缓存文件流
        var stream = fs.createWriteStream(localFile);
        stream.on('finish', async ()=>{
            // 完成本地缓存流的写入,处理上传到OSS
            var key = "file/" + localFile;
            client.useBucket(ali_oss.bucket);
            // 创建读取缓存的文件流
            let stream = fs.createReadStream(localFile);
            let result = await client.putStream(key, stream);
            console.log(result);
            var imageSrc = result.name;
            // 完成上传后删除缓存文件
            fs.unlinkSync("./" + localFile);
            var resultUrl = result.res.requestUrls[0];
            console.log(resultUrl);
        });
        // 流管道
        request(url).pipe(stream);
    } catch (e) {
        lonsole.error(e);
    }
}

最后就是模拟请求完成最后的测试工作

var url = 'https://www.baidu.com/img/baidu_jgylogo3.gif';
var a = PutOssStream(url);

 

转载请注明:隨習筆記 » NodeJS:保存文件流到阿里云的OSS上