您的位置:首页 > Web前端 > JavaScript

oss在thinkjs上传demo

2016-06-16 17:51 483 查看
在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)
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oss thinkjs