feat: 完成前端业务闭环与后端联调
This commit is contained in:
+15
-11
@@ -133,7 +133,7 @@ const pickBrowserVideo = () => new Promise((resolve, reject) => {
|
||||
input.click();
|
||||
});
|
||||
|
||||
const readNativeFile = (filePath) => new Promise((resolve, reject) => {
|
||||
const readNativeFile = (filePath, mediaLabel) => new Promise((resolve, reject) => {
|
||||
if (typeof globalThis.uni?.getFileInfo === 'function') {
|
||||
const normalizedPath = String(filePath || '')
|
||||
const fileName = normalizedPath.split(/[\\/]/).pop() || 'file'
|
||||
@@ -148,7 +148,7 @@ const readNativeFile = (filePath) => new Promise((resolve, reject) => {
|
||||
contentType: 'application/octet-stream',
|
||||
md5: String(file.digest || '').toLowerCase()
|
||||
}),
|
||||
fail: () => reject(createUploadError('读取图片信息失败', 'IMAGE_READ_FAILED'))
|
||||
fail: () => reject(createUploadError(`读取${mediaLabel}信息失败`, 'MEDIA_READ_FAILED'))
|
||||
})
|
||||
} catch (error) {
|
||||
reject(error)
|
||||
@@ -156,7 +156,7 @@ const readNativeFile = (filePath) => new Promise((resolve, reject) => {
|
||||
return
|
||||
}
|
||||
if (!globalThis.plus?.io?.resolveLocalFileSystemURL || !globalThis.plus?.io?.FileReader) {
|
||||
reject(createUploadError("当前运行环境不支持读取图片", "IMAGE_READ_UNAVAILABLE"));
|
||||
reject(createUploadError(`当前运行环境不支持读取${mediaLabel}`, "MEDIA_READ_UNAVAILABLE"));
|
||||
return;
|
||||
}
|
||||
globalThis.plus.io.resolveLocalFileSystemURL(
|
||||
@@ -167,7 +167,7 @@ const readNativeFile = (filePath) => new Promise((resolve, reject) => {
|
||||
reader.onloadend = (event) => {
|
||||
const fileData = event?.target?.result ?? reader.result;
|
||||
if (!(fileData instanceof ArrayBuffer)) {
|
||||
reject(createUploadError("读取图片数据失败", "IMAGE_READ_INVALID"));
|
||||
reject(createUploadError(`读取${mediaLabel}数据失败`, "MEDIA_READ_INVALID"));
|
||||
return;
|
||||
}
|
||||
resolve({
|
||||
@@ -178,12 +178,12 @@ const readNativeFile = (filePath) => new Promise((resolve, reject) => {
|
||||
data: fileData,
|
||||
});
|
||||
};
|
||||
reader.onerror = () => reject(createUploadError("读取图片数据失败", "IMAGE_READ_FAILED"));
|
||||
reader.onerror = () => reject(createUploadError(`读取${mediaLabel}数据失败`, "MEDIA_READ_FAILED"));
|
||||
reader.readAsArrayBuffer(file);
|
||||
},
|
||||
() => reject(createUploadError("读取图片信息失败", "IMAGE_READ_FAILED")),
|
||||
() => reject(createUploadError(`读取${mediaLabel}信息失败`, "MEDIA_READ_FAILED")),
|
||||
),
|
||||
() => reject(createUploadError("无法读取所选图片", "IMAGE_READ_FAILED")),
|
||||
() => reject(createUploadError(`无法读取所选${mediaLabel}`, "MEDIA_READ_FAILED")),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -204,15 +204,19 @@ const toUploadReceipt = ({ ossId, url = "", thumbnailUrl = "", fileName = "" })
|
||||
|
||||
export const pickAndUploadImage = async ({ requestController = null } = {}) => {
|
||||
const file = globalThis.plus?.gallery?.pick
|
||||
? await readNativeFile(await pickNativeImage())
|
||||
? await readNativeFile(await pickNativeImage(), "图片")
|
||||
: await pickBrowserImage();
|
||||
const fileName = String(file.fileName || "");
|
||||
if (!String(file.contentType || "").startsWith("image/") && !/\.(jpe?g|png|gif|webp|heic|heif)$/i.test(fileName)) {
|
||||
throw createUploadError("请选择图片文件", "IMAGE_TYPE_INVALID");
|
||||
}
|
||||
if (!Number.isSafeInteger(file.size) || file.size <= 0) {
|
||||
throw createUploadError("所选图片大小无效", "IMAGE_SIZE_INVALID");
|
||||
}
|
||||
const fileMd5 = file.md5 || calcMD5Bytes(file.data);
|
||||
const initPayload = {
|
||||
uploadId: createUploadId(),
|
||||
fileName: file.fileName,
|
||||
fileName,
|
||||
fileMd5,
|
||||
totalSize: file.size,
|
||||
totalChunks: 1,
|
||||
@@ -233,7 +237,7 @@ export const pickAndUploadImage = async ({ requestController = null } = {}) => {
|
||||
}
|
||||
const completed = await fileUploadApi.completeResumableUpload({
|
||||
uploadId: initialized.uploadId,
|
||||
fileName: file.fileName,
|
||||
fileName,
|
||||
fileMd5,
|
||||
totalSize: file.size,
|
||||
totalChunks: 1,
|
||||
@@ -243,7 +247,7 @@ export const pickAndUploadImage = async ({ requestController = null } = {}) => {
|
||||
|
||||
export const pickAndUploadVideo = async ({ requestController = null } = {}) => {
|
||||
const file = globalThis.plus?.gallery?.pick
|
||||
? await readNativeFile(await pickNativeVideo())
|
||||
? await readNativeFile(await pickNativeVideo(), "视频")
|
||||
: await pickBrowserVideo();
|
||||
const fileName = String(file.fileName || "");
|
||||
if (!String(file.contentType || "").startsWith("video/") && !/\.(mp4|mov|m4v|webm|avi|mkv)$/i.test(fileName)) {
|
||||
|
||||
Reference in New Issue
Block a user