node egg.js 上传图片到第三方图片存储服务器方法

// 上传 image 文件 方法1: form表单 2:图片转base64编码

async imageFile(ctx) {

let result = { message: 'upload failed', status:'FAILED' };

//let result = { message:'http://qukufile2.qianqian.com/data2/pic/90392fb17371a44e39097fd00846ef97/66087/66087.jpg@s_1,w_300,h_300', status:'SUCCEED' };

let baseDir = ctx.app.baseDir;

const stream = await ctx.getFileStream();

const filename = path.basename(stream.filename);

// 判断 upload_file 文件夹是否存在, 不存在则创建

const dirExists = fs.existsSync(path.join(baseDir, './upload_file/image'));

if (!dirExists) {

fs.mkdirSync(path.join(baseDir, './upload_file/'));

扫描二维码关注公众号,回复: 4381719 查看本文章

fs.mkdirSync(path.join(baseDir, './upload_file/image'));

}

const target = path.join(baseDir, './upload_file/image/', filename);

const writeStream = fs.createWriteStream(target);

try {

// 写入文件

await awaitStreamReady(stream.pipe(writeStream));

} catch (err) {

// 必须将上传的文件流消费掉,要不然浏览器响应会卡死

await sendToWormhole(stream);

result['message'] = 'write stream fail!';

throw err;

}

let picDir = ctx.request.body.picDir || 'image'

let remoteFileName = "d4/pic/cms/"+picDir+"/"+filename

let remoteUrl = "http://img.XXX.org/"+ remoteFileName

// 调用接口上传

const form = new FormStream();

form.file('file', target);

let postResult;

let base64fileUpload= async()=>{

var imageBuf = fs.readFileSync(target);

var base64Img = imageBuf.toString('base64');

try {

postResult = await ctx.curl('http://XXX:6003/mw/upload?sign=n_e_m_o&filename=' + remoteFileName, {

method: 'POST',

data: {

base64file: base64Img,

},

headers: form.headers(),

});

if (postResult.data && postResult.status === 200) {

result['status'] = 'SUCCEED';

result['message'] = remoteUrl;

}

} catch (error) {

this.ctx.logger.error(`upload image base64file:${error}`);

}

}

try {

postResult = await ctx.curl('http://XXX:6003/mw/upload?sign=n_e_m_o&filename=' + remoteFileName, {

method: 'POST',

headers: form.headers(),

stream: form,

timeout: 1000 * 120, // 2m内请求完成

});

if (postResult.data && postResult.status === 200) {

result['status'] = 'SUCCEED';

result['message'] = remoteUrl;

}

} catch (error) {

this.ctx.logger.error(`upload image stream form:${error}`);

await base64fileUpload()

}

ctx.body = result;

}

猜你喜欢

转载自my.oschina.net/u/180293/blog/2209440