Commit 0b1d9fd0 authored by rockyl's avatar rockyl

修改6

parent ef6811c1
......@@ -19,48 +19,78 @@ function applyApi(server) {
server.post('/tinify', tinify);
}
exports.default = applyApi;
//一个文件可以返回blob,多个文件必须传cdnPath
async function tinify(req, res, next) {
let file = req.files.file;
const { type = 'builtin', cdnPath } = req.query;
if (file) {
if (acceptTypes.includes(file.type)) {
try {
const buffer = await (0, compress_1.compressImage)(file.path, type);
if (cdnPath) {
const name = await (0, ali_oss_duiba_1.uploadFile)(buffer, cdnPath);
res.send({
code: 0,
data: name
});
}
else {
res.sendRaw(buffer, {
'Content-Type': file.type,
});
}
}
catch (e) {
logger_1.default.error('/tinify', 'compress failed', e.message);
res.send({
code: 3,
msg: 'compress failed'
});
}
const fileMap = req.files;
const files = Object.entries(fileMap).filter(([key, file]) => {
const accept = acceptTypes.includes(file.type);
if (accept) {
file.key = key;
}
return accept;
}).map(([key, file]) => file);
const fileCount = files.length;
if (fileCount === 0) {
res.send({
code: 1,
msg: 'file not exists'
});
}
else if (fileCount === 1) {
const [file] = files;
const result = await tinifyOnce(file.path, type, cdnPath);
if (typeof result === 'string') {
res.send({
code: 0,
data: result
});
}
else if (Buffer.isBuffer(result)) {
res.sendRaw(result, {
'Content-Type': file.type,
});
}
else {
logger_1.default.error('/tinify', 'type error');
logger_1.default.error('/tinify', 'compress failed', result.message);
res.send({
code: 2,
msg: 'type error'
code: 3,
msg: 'compress failed'
});
}
}
else if (cdnPath) {
const urls = await Promise.all(files.map(file => tinifyOnce(file.path, type, cdnPath)
.then(result => {
if (typeof result === 'string') {
return {
key: file.key,
url: result,
};
}
})));
console.log(urls);
}
else {
res.send({
code: 1,
msg: 'file not exists'
code: 4,
msg: 'specify cdnPath when multi files'
});
}
return next();
}
async function tinifyOnce(filePath, type, cdnPath) {
try {
const buffer = await (0, compress_1.compressImage)(filePath, type);
if (cdnPath) {
return (0, ali_oss_duiba_1.uploadFile)(buffer, cdnPath);
}
else {
return buffer;
}
}
catch (e) {
return e;
}
}
//# sourceMappingURL=api.js.map
\ No newline at end of file
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,qCAA6B;AAC7B,yCAAwC;AACxC,iDAAwC;AAExC,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;AAE/C,SAAwB,QAAQ,CAAC,MAAM;IACtC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI;QAC3C,GAAG,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAA;QAC3C,OAAO,IAAI,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI;QACpD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACjB,OAAO,IAAI,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AAC/B,CAAC;AAZD,2BAYC;AAED,KAAK,UAAU,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;IACnC,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAA;IACzB,MAAM,EAAC,IAAI,GAAG,SAAS,EAAE,OAAO,EAAC,GAAG,GAAG,CAAC,KAAK,CAAA;IAE7C,IAAI,IAAI,EAAE;QACT,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACpC,IAAI;gBACH,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAa,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBACnD,IAAI,OAAO,EAAE;oBACZ,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAU,EAAC,MAAM,EAAE,OAAO,CAAC,CAAA;oBAC9C,GAAG,CAAC,IAAI,CAAC;wBACR,IAAI,EAAE,CAAC;wBACP,IAAI,EAAE,IAAI;qBACV,CAAC,CAAA;iBACF;qBAAM;oBACN,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE;wBACnB,cAAc,EAAE,IAAI,CAAC,IAAI;qBACzB,CAAC,CAAA;iBACF;aACD;YAAC,OAAO,CAAC,EAAE;gBACX,gBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;gBACrD,GAAG,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,CAAC;oBACP,GAAG,EAAE,iBAAiB;iBACtB,CAAC,CAAA;aACF;SACD;aAAM;YACN,gBAAM,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YACrC,GAAG,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,CAAC;gBACP,GAAG,EAAE,YAAY;aACjB,CAAC,CAAA;SACF;KACD;SAAM;QACN,GAAG,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,iBAAiB;SACtB,CAAC,CAAA;KACF;IACD,OAAO,IAAI,EAAE,CAAA;AACd,CAAC"}
\ No newline at end of file
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
### 查询项目
POST http://localhost:8090/tinify?type=tinypng&cdnPath=spark/assets
POST http://localhost:8090/tinify?cdnPath=spark/assets
Accept: */*
Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=WebAppBoundary
--WebAppBoundary--
Content-Disposition: form-data; name="file"; filename="Github.png"
Content-Type: image/png
Content-Disposition: form-data; name="file1"; filename="1643017.jpg"
Content-Type: image/jpeg
< /Users/rockyl/Pictures/1643017.jpg
--WebAppBoundary--
Content-Disposition: form-data; name="file2"; filename="烽火台-logo.png"
Content-Type: image/png
< /Users/rockyl/Pictures/烽火台-logo.png
--WebAppBoundary--
......@@ -22,44 +22,74 @@ export default function applyApi(server) {
server.post('/tinify', tinify)
}
//一个文件可以返回blob,多个文件必须传cdnPath
async function tinify(req, res, next) {
let file = req.files.file
const {type = 'builtin', cdnPath} = req.query
if (file) {
if (acceptTypes.includes(file.type)) {
try {
const buffer = await compressImage(file.path, type)
if (cdnPath) {
const name = await uploadFile(buffer, cdnPath)
res.send({
code: 0,
data: name
})
} else {
res.sendRaw(buffer, {
'Content-Type': file.type,
})
}
} catch (e) {
logger.error('/tinify', 'compress failed', e.message)
res.send({
code: 3,
msg: 'compress failed'
})
}
const fileMap: { [key: string]: any } = req.files
const files = Object.entries(fileMap).filter(([key, file]) => {
const accept = acceptTypes.includes(file.type)
if (accept) {
file.key = key
}
return accept
}).map(([key, file]) => file)
const fileCount = files.length
if (fileCount === 0) {
res.send({
code: 1,
msg: 'file not exists'
})
} else if (fileCount === 1) {
const [file] = files
const result = await tinifyOnce(file.path, type, cdnPath)
if (typeof result === 'string') {
res.send({
code: 0,
data: result
})
} else if (Buffer.isBuffer(result)) {
res.sendRaw(result, {
'Content-Type': file.type,
})
} else {
logger.error('/tinify', 'type error')
logger.error('/tinify', 'compress failed', result.message)
res.send({
code: 2,
msg: 'type error'
code: 3,
msg: 'compress failed'
})
}
} else if (cdnPath) {
const urls = await Promise.all(files.map(file => tinifyOnce(file.path, type, cdnPath)
.then(result => {
if (typeof result === 'string') {
return {
key: file.key,
url: result,
}
}
})
))
console.log(urls)
} else {
res.send({
code: 1,
msg: 'file not exists'
code: 4,
msg: 'specify cdnPath when multi files'
})
}
return next()
}
async function tinifyOnce(filePath, type, cdnPath) {
try {
const buffer = await compressImage(filePath, type)
if (cdnPath) {
return uploadFile(buffer, cdnPath)
} else {
return buffer
}
} catch (e) {
return e
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment