feat: 完善BowongAI SDK文件处理功能

- 修复_getExt方法中PNG类型映射错误
- 新增_generateFileName辅助方法,确保文件名包含正确扩展名
- 优化H5和普通上传方法的文件名生成逻辑
- 增强MIME类型与扩展名映射支持
- 提升跨平台文件处理一致性
This commit is contained in:
imeepos 2025-09-28 15:54:59 +08:00
parent a3b2942872
commit db6c19dae1
1 changed files with 54 additions and 19 deletions

View File

@ -94,7 +94,7 @@ export class BowongAISDK {
}
// 自动生成文件名(如果未提供)
const fileName = name || `upload_${Date.now()}_${this._getFileExtension(filePath)}`;
const fileName = this._generateFileName(filePath, name, type);
// 自动判断文件类型(如果未提供)
const fileType = type || this._getMimeType(filePath);
@ -106,12 +106,12 @@ export class BowongAISDK {
// 创建FormData
const formData = new FormData();
// 在H5环境中需要先将filePath转换为File对象
const response = await fetch(filePath);
const blob = await response.blob();
const file = new File([blob], fileName, { type: fileType });
formData.append('file', file);
formData.append('filename', fileName);
formData.append('type', fileType);
@ -164,13 +164,13 @@ export class BowongAISDK {
if (img_file) {
// 创建FormData
const formData = new FormData();
// 在H5环境中需要先将filePath转换为File对象
const response = await fetch(img_file);
const blob = await response.blob();
const fileName = `generate_${Date.now()}.${this._getFileExtension(img_file)}`;
const file = new File([blob], fileName, { type: this._getMimeType(img_file) });
formData.append('img_file', file);
formData.append('prompt', prompt);
formData.append('model_name', model_name);
@ -238,7 +238,7 @@ export class BowongAISDK {
fileInfo = { size: 0 };
}
// 自动生成文件名(如果未提供)
const fileName = name || `upload_${Date.now()}.${this._getFileExtension(filePath)}`;
const fileName = this._generateFileName(filePath, name, type);
// 自动判断文件类型(如果未提供)
const fileType = type || this._getMimeType(filePath);
@ -363,14 +363,14 @@ export class BowongAISDK {
} catch (error) {
console.error('选择并上传图片失败:', error);
// 检查是否是授权被拒绝的错误
if (this._isAuthorizationError(error)) {
await this._handleAuthorizationError();
// 用户重新授权后,递归调用自己重试
return this.chooseAndUploadImage(options);
}
throw error;
}
}
@ -383,13 +383,13 @@ export class BowongAISDK {
if (!error || typeof error.errMsg !== 'string') {
return false;
}
const errMsg = error.errMsg.toLowerCase();
return errMsg.includes('auth') ||
errMsg.includes('permission') ||
errMsg.includes('denied') ||
errMsg.includes('authorize') ||
errMsg.includes('scope');
return errMsg.includes('auth') ||
errMsg.includes('permission') ||
errMsg.includes('denied') ||
errMsg.includes('authorize') ||
errMsg.includes('scope');
}
/**
@ -411,9 +411,9 @@ export class BowongAISDK {
success: (settingResult) => {
console.log('用户设置结果:', settingResult);
// 检查是否授权了相册权限
if (settingResult.authSetting &&
(settingResult.authSetting['scope.writePhotosAlbum'] ||
settingResult.authSetting['scope.camera'])) {
if (settingResult.authSetting &&
(settingResult.authSetting['scope.writePhotosAlbum'] ||
settingResult.authSetting['scope.camera'])) {
Taro.showToast({
title: '授权成功',
icon: 'success',
@ -501,14 +501,14 @@ export class BowongAISDK {
} catch (error) {
console.error('选择并上传图片失败:', error);
// 检查是否是授权被拒绝的错误
if (this._isAuthorizationError(error)) {
await this._handleAuthorizationError();
// 用户重新授权后,递归调用自己重试
return this.chooseAndGenerateImage(options);
}
throw error;
}
}
@ -541,6 +541,41 @@ export class BowongAISDK {
return mimeTypes[extension] || 'application/octet-stream';
}
private _getExt(type: string): string {
const mimeTypes: Record<string, string> = {
'image/jpeg': 'jpg',
'image/png': 'png',
'image/gif': 'gif',
'image/webp': 'webp',
'video/mp4': 'mp4',
'video/quicktime': 'mov',
'video/x-msvideo': 'avi'
};
return mimeTypes[type] || 'jpg';
}
/**
*
* @private
*/
private _generateFileName(filePath: string, name?: string, type?: string): string {
// 如果提供了名称,使用提供的名称
if (name) {
// 检查名称是否包含扩展名
if (name.includes('.')) {
return name;
}
// 没有扩展名,需要添加
const fileType = type || this._getMimeType(filePath);
const extension = this._getExt(fileType);
return `${name}.${extension}`;
}
// 没有提供名称,自动生成
const fileExtension = this._getFileExtension(filePath);
return `upload_${Date.now()}.${fileExtension}`;
}
/**
*
* @param params