在common中添加ossutil.js文件
ossutil.js內容如下:
'use strict'; import co from 'co'; import OSS from 'ali-oss'; import fs from 'fs'; export default class extends think.service.base { init(){ super.init(); } async uploadFile(file){ let filePath=file.path; let origName=file.originalFilename; let fileType=origName.substr(origName.lastIndexOf('.')); let newFilePath=''; let isChangeName=fileType.match(/\.(gif|png|jpe?g)$/i); if(think.isEmpty(isChangeName)){ newFilePath=origName; }else{ let date = new Date(); newFilePath=think.datetime(date,"YYYY/MM/DD/")+date.getTime()+fileType; } let result=await this.putStream(newFilePath,filePath); if(result.res.status==200){ return {"errno":0,"errmsg":""}; }else{ return {"errno":100,"errmsg":"","data":""}; } } //本地上傳 async put(fileName,filePath){ let client=this.getClient(true); let result=co(function* () { let resultCo = yield client.put(fileName, filePath); return resultCo; }).catch(function (err) { console.log(err); }); return result; } //流式上傳 async putStream(fileName,filePath){ let client=this.getClient(true); let result=co(function* () { let stream = fs.createReadStream(filePath); let resultCo = yield client.putStream(fileName, stream); return resultCo; }).catch(function (err) { console.log(err); }); return result; } //下載到本地文件 async get(object_key,localFile){ let client=this.getClient(true); let result=co(function* () { let resultCo = yield client.get(object_key, localFile); return resultCo; }).catch(function (err) { console.log(err); }); return result; } //流式下載 async getBuyStream(object_key,localFile){ let client=this.getClient(true); co(function* () { var result = yield client.getStream(object_key); var writeStream = fs.createWriteStream(localFile); result.stream.pipe(writeStream); }).catch(function (err) { console.log(err); }); } //獲取文件buffer async getBuffer(object_key){ let client=this.getClient(true); let result=co(function* () { var resultCo = yield client.get(object_key); return resultCo.content; }).catch(function (err) { console.log(err); }); return result; } //獲取Client方法 getClient(hasbucket){ if(hasbucket){ let client = new OSS({ region: 'xxxxxxxxxx', accessKeyId: 'xxxxxxxxxxx', accessKeySecret: 'xxxxxxxxxxxxxxx', bucket: 'xxxxxxx' }); return client; }else{ let client = new OSS({ region: 'xxxxxxxx', accessKeyId: 'xxxxxxxxxx', accessKeySecret: 'xxxxxxxxxxxxxxxxxxx' }); return client; } } } controller 中代碼如下:
import Base from './base.js'; export default class extends Base { /** * index action * @return {Promise} [] */ async indexAction(){ return this.display(); } async uploadAction(){ let file = this.file('file'); let ossutil=think.service('ossutil'); let instance=new ossutil(); let result=await instance.uploadFile(file); return this.json(result) } }