|
|
@@ -17,6 +17,33 @@ const OSS_FINALIZE_PATH = "/upload/oss/finalize";
|
|
|
/** 浏览器默认可达;内网可配 VITE_OSS_UPLOAD_ENDPOINT=oss-cn-beijing-internal.aliyuncs.com */
|
|
|
const DEFAULT_OSS_UPLOAD_ENDPOINT = "oss-cn-beijing.aliyuncs.com";
|
|
|
|
|
|
+/** 商户 Web 端上传统一上限:图 20MB、视频 200MB */
|
|
|
+const WEB_UPLOAD_IMAGE_MAX_BYTES = 20 * 1024 * 1024;
|
|
|
+const WEB_UPLOAD_VIDEO_MAX_BYTES = 200 * 1024 * 1024;
|
|
|
+const WEB_UPLOAD_TIP_IMAGE = "图片建议不超过 20MB";
|
|
|
+const WEB_UPLOAD_TIP_VIDEO = "视频建议不超过 200MB";
|
|
|
+
|
|
|
+/**
|
|
|
+ * @param {File[]} fileArr
|
|
|
+ * @param {string} [fileType] image | video
|
|
|
+ */
|
|
|
+function assertWebUploadFilesWithinLimit(fileArr, fileType) {
|
|
|
+ const kind = fileType === "video" ? "video" : fileType === "image" ? "image" : "";
|
|
|
+ for (const file of fileArr) {
|
|
|
+ const size = Number(file?.size);
|
|
|
+ if (!Number.isFinite(size) || size <= 0) continue;
|
|
|
+ const mime = String(file?.type || "").toLowerCase();
|
|
|
+ const isVideo = kind === "video" || mime.startsWith("video/");
|
|
|
+ const isImage = kind === "image" || mime.startsWith("image/");
|
|
|
+ if (isVideo && size > WEB_UPLOAD_VIDEO_MAX_BYTES) {
|
|
|
+ throw new Error(WEB_UPLOAD_TIP_VIDEO);
|
|
|
+ }
|
|
|
+ if (isImage && size > WEB_UPLOAD_IMAGE_MAX_BYTES) {
|
|
|
+ throw new Error(WEB_UPLOAD_TIP_IMAGE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* 已由 uploadFilesToOss 弹出过 ElMessage,调用方勿重复 error
|
|
|
* @param {unknown} err
|
|
|
@@ -893,6 +920,7 @@ export async function uploadFilesToOss(files, _fileType, options = {}) {
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
+ assertWebUploadFilesWithinLimit(fileArr, _fileType);
|
|
|
const runUpload = async signal => {
|
|
|
const uploadedUrls = [];
|
|
|
const fetchOpts = signal ? { signal } : {};
|