近段时间忙着做项目,中间也遇到了一些新的需求,但忙着赶没有时间更新。这次的更新实践过程是将一张在线的图片转存到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上