import { ref } from 'vue';
|
import JSEncrypt from 'jsencrypt'; // 导入 JSEncrypt 库
|
|
export const useUploadHook = (baseUrl: string) => {
|
const computedUploadUrl = ref(baseUrl);
|
|
// RSA 加密用的公钥
|
const publicKey = `-----BEGIN PUBLIC KEY-----
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkRupiYcKVGGUtDBDoR1t/1zm3ZtZgnte39iTJW6hlqjdY0UagKjpNiIv7J6XjtgfX7SgsR4AWnivqQHAICIvdPKfGZZzIs62OQ19MqrDTMoB/LvK5teNWhClv23WMUfRbP+EHgprT6hTw8U5apw1IB6i/y57NkLav792wiYBYRU4X45NoTaT+aiTSLFEflbfm94EXnhSS3vFkBmrZGy5BRNI8gmzafroslGx2Hk90CqlNdeKYxgZQ6xtvj+u33yrszWvPT6F9fsJT8aMjtvH050iYKRVct+x6Q7VRJgCI4MgvAexnTKdxW54YzvXCuO5bDiy5la7CgerWkTAq9dzXwIDAQAB
|
-----END PUBLIC KEY-----`;
|
|
// 固定的域名和ID(将来可从 Vuex 中获取)
|
const domain = 'https://img.onbus.cn';
|
const dbid = 82; // 这里可以从 Vuex 获取
|
const formid = 0; // 这里也可以从 Vuex 获取
|
const uuid = ref(undefined); // 这里也可以从 Vuex 获取
|
|
// 使用 RSA 加密数据
|
const encryptData = (data: Record<string, any>) => {
|
const encryptor = new JSEncrypt();
|
encryptor.setPublicKey(publicKey);
|
|
const encryptedData: Record<string, string> = {};
|
for (const key in data) {
|
if (data.hasOwnProperty(key)) {
|
const encryptedValue = encryptor.encrypt(data[key]);
|
if (encryptedValue) {
|
encryptedData[key] = encodeURIComponent(encryptedValue); // URL 编码
|
}
|
}
|
}
|
return encryptedData;
|
};
|
|
// 获取上传数据并加密
|
const getUploadData = (uuid) => {
|
const data = {
|
dbid: dbid.toString(),
|
username: 'huang',
|
usercode: 'z9000137',
|
};
|
|
const newData = encryptData(data);
|
return { ...newData, type: 3, fieldid: '333', uuid: uuid };
|
};
|
|
// 生成文件 URL
|
const generateFileUrl = (response: any) => {
|
const unid = response.uuid.split(';')[0] + '@P@' + response.uuid.split(';')[1];
|
const fileExt = response.fileType;
|
|
return `${domain}/uploads/attachment/${dbid}/${formid}/${unid}.${fileExt}`;
|
};
|
|
return { computedUploadUrl, getUploadData, generateFileUrl };
|
};
|