You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.8 KiB
114 lines
3.8 KiB
'use strict';
|
|
const request = require('superagent');
|
|
// const parse = require('async-busboy');
|
|
// const path = require('path')
|
|
// const fs = require('fs');
|
|
|
|
const ext = {
|
|
project: [".txt", ".dwg", ".doc", ".docx", ".xls", ".xlsx", ".pdf", ".png", ".jpg", ".svg"],
|
|
report: [".doc", ".docx", ".xls", ".xlsx", ".pdf"],
|
|
data: [".txt", ".xls", ".xlsx"],
|
|
image: [".png", ".jpg", ".svg"],
|
|
three: [".js"],
|
|
video: [".mp4"],
|
|
bpmn: [".bpmn", ".bpmn20.xml", ".zip", ".bar"],
|
|
app: [".apk"],
|
|
excel: ['.xls', '.xlsx', '.csv'],
|
|
}
|
|
|
|
module.exports = {
|
|
entry: function (app, router, opts) {
|
|
|
|
const getApiRoot = async function (ctx) {
|
|
const { apiUrl } = opts;
|
|
|
|
ctx.status = 200;
|
|
ctx.body = {
|
|
root: apiUrl,
|
|
};
|
|
};
|
|
|
|
let download = async function (ctx, next) {
|
|
const { fetchUrl } = opts.qiniu;
|
|
if (ctx.path && ctx.path.includes(fetchUrl)) {
|
|
try {
|
|
const { filename } = ctx.request.query;
|
|
const fkey = decodeURI(ctx.path.slice(fetchUrl.length + 1)).replace(/\.json$/, '.js');
|
|
const publicDownloadUrl = await app.fs.attachment.download(fkey);
|
|
ctx.status = 200;
|
|
if (filename) ctx.attachment(filename);
|
|
ctx.body = request.get(publicDownloadUrl);
|
|
} catch (err) {
|
|
ctx.fs.logger.error(err);
|
|
ctx.status = 404;
|
|
ctx.body = { error: 'file not found.' }
|
|
}
|
|
} else {
|
|
await next();
|
|
}
|
|
}
|
|
|
|
|
|
let upload = async function (ctx, next) {
|
|
try {
|
|
console.log('-------------');
|
|
const { token } = ctx.request.query
|
|
console.log(token);
|
|
if (token) {
|
|
const { files } = await parse(ctx.req)
|
|
const file = files[0]
|
|
const extname = path.extname(file.filename).toLowerCase()
|
|
const ftype = ctx.query.type;
|
|
if (!(FILE_TYPE[ftype] || []).includes(extname)) {
|
|
ctx.status = 400
|
|
ctx.body = { error: '文件格式无效' }
|
|
return;
|
|
}
|
|
const fileInfo = await app.fs.attachment.upload(file, { uploadPath: ftype }) // uploadPath: 附件存放的文件夹
|
|
ctx.status = 200;
|
|
console.log(fileInfo);
|
|
console.log('0000000000000000000000');
|
|
|
|
ctx.body = { uploaded: fileInfo.key } // key: `${uploadPath}/${uuid}/${filename}`
|
|
} else {
|
|
ctx.status = 403
|
|
ctx.body = { name: 'Forbidden', message: 'token无效,禁止访问' }
|
|
}
|
|
} catch (err) {
|
|
ctx.status = 400
|
|
ctx.body = {
|
|
name: 'BadRequest',
|
|
message: 'error happened while uploading file to qiniu.'
|
|
}
|
|
}
|
|
}
|
|
|
|
let remove = async function (ctx, next) {
|
|
try {
|
|
const { token } = ctx.request.query
|
|
if (token) {
|
|
const { fkeys } = ctx.request.body
|
|
for (let index = 0; index < fkeys.length; index++) {
|
|
await app.fs.attachment.remove(fkeys[index])
|
|
}
|
|
ctx.status = 200
|
|
ctx.body = { fkeys }
|
|
} else {
|
|
ctx.status = 403
|
|
ctx.body = { name: 'Forbidden', message: 'token无效,禁止访问' }
|
|
}
|
|
} catch (err) {
|
|
ctx.status = 400
|
|
ctx.body = {
|
|
name: 'BadRequest',
|
|
message: 'error happened while removing file from qiniu.'
|
|
}
|
|
}
|
|
}
|
|
|
|
router.use(download);
|
|
router.get('/api/root', getApiRoot);
|
|
router.post('/file/qiniu/upload', upload);
|
|
router.post('/file/qiniu/remove', remove);
|
|
}
|
|
};
|
|
|