115 lines
2.8 KiB
JavaScript
115 lines
2.8 KiB
JavaScript
/**
|
||
* 图片处理模块
|
||
* 负责图片选择、上传、删除等操作
|
||
*/
|
||
|
||
import oss from '../../../utils/oss.js';
|
||
|
||
/**
|
||
* 选择图片
|
||
* @param {Number} maxCount - 最大数量
|
||
* @param {Number} currentCount - 当前数量
|
||
* @returns {Promise} 选择的图片路径数组
|
||
*/
|
||
export function chooseImage(maxCount = 6, currentCount = 0) {
|
||
const remainCount = maxCount - currentCount;
|
||
|
||
if (remainCount <= 0) {
|
||
wx.showToast({
|
||
title: `最多只能上传${maxCount}张图片`,
|
||
icon: 'none'
|
||
});
|
||
return Promise.resolve([]);
|
||
}
|
||
|
||
return new Promise((resolve, reject) => {
|
||
wx.chooseMedia({
|
||
count: remainCount,
|
||
mediaType: ['image'],
|
||
sizeType: ['compressed'],
|
||
sourceType: ['album', 'camera'],
|
||
success: function(res) {
|
||
const newImages = res.tempFiles.map(function(file) {
|
||
return file.tempFilePath;
|
||
});
|
||
resolve(newImages);
|
||
},
|
||
fail: function(err) {
|
||
reject(err);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 上传图片到 OSS
|
||
* @param {String} tempFilePath - 临时文件路径
|
||
* @param {String} taskId - 任务ID
|
||
* @param {String} subDir - 子目录(如 'subjective', 'essay')
|
||
* @returns {Promise} 上传后的图片URL
|
||
*/
|
||
export function uploadImage(tempFilePath, taskId, subDir = 'subjective') {
|
||
return new Promise(function(resolve, reject) {
|
||
(async function(){
|
||
try {
|
||
var cfg = await oss.getOssConfig('camp');
|
||
if (!cfg) return reject(new Error('无法获取上传凭证'));
|
||
|
||
var ext = 'jpg';
|
||
if (/(\.png)$/i.test(tempFilePath)) ext = 'png';
|
||
else if (/(\.jpeg)$/i.test(tempFilePath)) ext = 'jpeg';
|
||
else if (/(\.webp)$/i.test(tempFilePath)) ext = 'webp';
|
||
|
||
var key = oss.buildOssKey({
|
||
baseDir: cfg.dir || 'camp',
|
||
subDir: subDir,
|
||
userId: wx.getStorageSync('wxuserid') || 'anonymous',
|
||
taskId: taskId || 'unknown',
|
||
ext: ext
|
||
});
|
||
|
||
wx.uploadFile({
|
||
url: cfg.host,
|
||
filePath: tempFilePath,
|
||
name: 'file',
|
||
formData: {
|
||
key: key,
|
||
policy: cfg.policy,
|
||
'x-oss-signature': cfg.signature,
|
||
'x-oss-signature-version': cfg.signatureVersion,
|
||
'x-oss-credential': cfg.credential,
|
||
'x-oss-date': cfg.date,
|
||
'x-oss-security-token': cfg.securityToken,
|
||
success_action_status: '200'
|
||
},
|
||
success: function(res){
|
||
if (res.statusCode === 204 || res.statusCode === 200) {
|
||
var url = cfg.host.replace(/\/$/, '') + '/' + key;
|
||
resolve(url);
|
||
} else {
|
||
reject(new Error('oss_upload_failed'));
|
||
}
|
||
},
|
||
fail: function(err){ reject(err); }
|
||
});
|
||
} catch (e) { reject(e); }
|
||
})();
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 预览图片
|
||
* @param {String} current - 当前图片URL
|
||
* @param {Array} urls - 所有图片URL数组
|
||
*/
|
||
export function previewImage(current, urls) {
|
||
if (!current || !urls || urls.length === 0) {
|
||
return;
|
||
}
|
||
wx.previewImage({
|
||
current: current,
|
||
urls: urls
|
||
});
|
||
}
|
||
|