oss在thinkjs上傳demo


在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)
  }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章