fix(oss): add binary upload route + base64 fallback fix + MIME types

- Add /oss/upload-binary route using busboy for FormData multipart uploads
- Fix parseUploadPayload base64 fallback: strip data:xxx;base64 prefix
  instead of using entire rawData string as base64 (caused 44-byte
  corrupt files when DATA_URL_PATTERN regex did not match)
- Add image/avif, image/heic, image/heif to MIME_EXTENSIONS

Root cause of ecommerce 502: base64 dataUrl not matching regex pattern
caused server to store corrupt 44-byte files on OSS, DashScope could
not read them and returned "image format is illegal" error.
This commit is contained in:
stringadmin
2026-06-02 15:45:29 +08:00
parent 0f8f3825e1
commit 035190420f
3 changed files with 92 additions and 1 deletions
+20
View File
@@ -10,6 +10,7 @@
"dependencies": {
"alipay-sdk": "^4.14.0",
"bcryptjs": "^2.4.3",
"busboy": "^1.6.0",
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"express": "^4.21.0",
@@ -159,6 +160,17 @@
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
"license": "BSD-3-Clause"
},
"node_modules/busboy": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
"integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
"dependencies": {
"streamsearch": "^1.1.0"
},
"engines": {
"node": ">=10.16.0"
}
},
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -1527,6 +1539,14 @@
"node": ">= 0.8"
}
},
"node_modules/streamsearch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
"integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/superagent": {
"version": "8.0.6",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.6.tgz",