Commit 0b1d9fd0 authored by rockyl's avatar rockyl

修改6

parent ef6811c1
...@@ -19,48 +19,78 @@ function applyApi(server) { ...@@ -19,48 +19,78 @@ function applyApi(server) {
server.post('/tinify', tinify); server.post('/tinify', tinify);
} }
exports.default = applyApi; exports.default = applyApi;
//一个文件可以返回blob,多个文件必须传cdnPath
async function tinify(req, res, next) { async function tinify(req, res, next) {
let file = req.files.file;
const { type = 'builtin', cdnPath } = req.query; const { type = 'builtin', cdnPath } = req.query;
if (file) { const fileMap = req.files;
if (acceptTypes.includes(file.type)) { const files = Object.entries(fileMap).filter(([key, file]) => {
try { const accept = acceptTypes.includes(file.type);
const buffer = await (0, compress_1.compressImage)(file.path, type); if (accept) {
if (cdnPath) { file.key = key;
const name = await (0, ali_oss_duiba_1.uploadFile)(buffer, cdnPath); }
res.send({ return accept;
code: 0, }).map(([key, file]) => file);
data: name const fileCount = files.length;
}); if (fileCount === 0) {
} res.send({
else { code: 1,
res.sendRaw(buffer, { msg: 'file not exists'
'Content-Type': file.type, });
}); }
} else if (fileCount === 1) {
} const [file] = files;
catch (e) { const result = await tinifyOnce(file.path, type, cdnPath);
logger_1.default.error('/tinify', 'compress failed', e.message); if (typeof result === 'string') {
res.send({ res.send({
code: 3, code: 0,
msg: 'compress failed' data: result
}); });
} }
else if (Buffer.isBuffer(result)) {
res.sendRaw(result, {
'Content-Type': file.type,
});
} }
else { else {
logger_1.default.error('/tinify', 'type error'); logger_1.default.error('/tinify', 'compress failed', result.message);
res.send({ res.send({
code: 2, code: 3,
msg: 'type error' 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 { else {
res.send({ res.send({
code: 1, code: 4,
msg: 'file not exists' msg: 'specify cdnPath when multi files'
}); });
} }
return next(); 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 //# 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"} {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
\ No newline at end of file \ 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: */* Accept: */*
Cache-Control: no-cache Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=WebAppBoundary Content-Type: multipart/form-data; boundary=WebAppBoundary
--WebAppBoundary-- --WebAppBoundary--
Content-Disposition: form-data; name="file"; filename="Github.png" Content-Disposition: form-data; name="file1"; filename="1643017.jpg"
Content-Type: image/png Content-Type: image/jpeg
< /Users/rockyl/Pictures/1643017.jpg < /Users/rockyl/Pictures/1643017.jpg
--WebAppBoundary-- --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) { ...@@ -22,44 +22,74 @@ export default function applyApi(server) {
server.post('/tinify', tinify) server.post('/tinify', tinify)
} }
//一个文件可以返回blob,多个文件必须传cdnPath
async function tinify(req, res, next) { async function tinify(req, res, next) {
let file = req.files.file
const {type = 'builtin', cdnPath} = req.query const {type = 'builtin', cdnPath} = req.query
if (file) { const fileMap: { [key: string]: any } = req.files
if (acceptTypes.includes(file.type)) {
try { const files = Object.entries(fileMap).filter(([key, file]) => {
const buffer = await compressImage(file.path, type) const accept = acceptTypes.includes(file.type)
if (cdnPath) { if (accept) {
const name = await uploadFile(buffer, cdnPath) file.key = key
res.send({ }
code: 0, return accept
data: name }).map(([key, file]) => file)
}) const fileCount = files.length
} else { if (fileCount === 0) {
res.sendRaw(buffer, { res.send({
'Content-Type': file.type, code: 1,
}) msg: 'file not exists'
} })
} catch (e) { } else if (fileCount === 1) {
logger.error('/tinify', 'compress failed', e.message) const [file] = files
res.send({ const result = await tinifyOnce(file.path, type, cdnPath)
code: 3, if (typeof result === 'string') {
msg: 'compress failed' res.send({
}) code: 0,
} data: result
})
} else if (Buffer.isBuffer(result)) {
res.sendRaw(result, {
'Content-Type': file.type,
})
} else { } else {
logger.error('/tinify', 'type error') logger.error('/tinify', 'compress failed', result.message)
res.send({ res.send({
code: 2, code: 3,
msg: 'type error' 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 { } else {
res.send({ res.send({
code: 1, code: 4,
msg: 'file not exists' msg: 'specify cdnPath when multi files'
}) })
} }
return next() 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