diff --git a/src/api/api.js b/src/api/api.js index 4e22f74..0c181ba 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -150,27 +150,31 @@ export function getStatisticAPI(params) { // 签名上传 export function uploadNoting(params) { return myAxios({ - url: '/portal/file/minio/upload', + url: `${sx}/energy-effcicency-net-service/nxzdUserFileNet/upload`, method: 'POST', - params: params + params: params, + unEncrypted: true }) } //图片上传 +// 注意:不能手动设置 Content-Type,否则浏览器不会自动生成 multipart boundary; +// 需 unEncrypted 跳过请求拦截器加密,FormData 不能被 JSON.stringify+SM4 替换 export function uploadFile(params) { // console.log(params); // console.log(decrypt(params)); return myAxios({ - url: '/file/minio/upload', + url: `${sx}/energy-effcicency-net-service/nxzdUserFileNet/upload`, method: 'POST', - data: params + data: params, + unEncrypted: true }) } //图片读取 export function downloadFile(attach_id) { return myAxios({ - url: '/file/minio/download', + url: `${sx}/energy-effcicency-net-service/nxzdUserFileNet/download/${attach_id}`, method: 'POST', - params: attach_id + responseType: 'blob', }) } // 生成诊断报告 diff --git a/src/settings.js b/src/settings.js index 97bb2fb..bfc05f3 100644 --- a/src/settings.js +++ b/src/settings.js @@ -10,8 +10,7 @@ module.exports = { */ sidebarLogo: true, menuExclude: [], - downloadUrl: `${process.env.VUE_APP_BASE_API}/proxy-cq/file/minio/download/`, - uploadUrl: `${process.env.VUE_APP_BASE_API}/file/minio/upload/`, + downloadUrl: `${process.env.VUE_APP_BASE_API}/energy-effcicency-net-service/nxzdUserFileNet/download/`, statusCode: { SUCCESS: 0 }, diff --git a/src/utils/index.js b/src/utils/index.js index c63b038..afe9667 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -183,4 +183,47 @@ export function fileDown (downLoadUrl, fileName, id,data) { // console.log("fileDownloadCallback 下载文件 回调 " + JSON.stringify(obj)); // } +/** + * 通过 POST 接口下载图片并返回 blob URL + * @param {string} attach_id 文件ID + * @returns {Promise} blob URL + */ +export async function getImageBlobUrl(attach_id) { + try { + const { downloadFile } = await import('@/api/api') + const blob = await downloadFile(attach_id) + if (blob instanceof Blob && blob.size > 0) { + const type = blob.type && blob.type.startsWith('image/') ? blob.type : 'image/jpeg' + const imgBlob = new Blob([blob], { type }) + const url = URL.createObjectURL(imgBlob) + console.log('getImageBlobUrl ok: id=', attach_id, 'type=', blob.type, 'size=', blob.size, 'url=', url) + return url + } + console.error('getImageBlobUrl 无效响应: id=', attach_id, 'isBlob=', blob instanceof Blob, 'size=', blob && blob.size, 'type=', blob && blob.type) + return '' + } catch (e) { + console.error('getImageBlobUrl 请求失败: id=', attach_id, e) + return '' + } +} +/** + * 通过 POST 接口下载文件并触发浏览器保存 + * 注意:后端返回的是文件流(Blob),浏览器不会自动下载,需手动触发 + * @param {string} attachId 文件ID + * @param {string} [fileName] 保存的文件名(带后缀),缺省为 'download' + */ +export async function downloadFileById(attachId, fileName) { + const { downloadFile } = await import('@/api/api') + const blob = await downloadFile(attachId) + if (!(blob instanceof Blob)) return + const url = URL.createObjectURL(blob) + const a = document.createElement('a') + a.href = url + a.download = fileName || 'download' + document.body.appendChild(a) + a.click() + a.remove() + URL.revokeObjectURL(url) +} + export default service diff --git a/src/views/comment/components/transform.vue b/src/views/comment/components/transform.vue index cb81e22..7ca319f 100644 --- a/src/views/comment/components/transform.vue +++ b/src/views/comment/components/transform.vue @@ -133,7 +133,7 @@ - \ No newline at end of file diff --git a/src/views/facilityManage/common-vue/uploader.vue b/src/views/facilityManage/common-vue/uploader.vue index dd50918..c742ac2 100644 --- a/src/views/facilityManage/common-vue/uploader.vue +++ b/src/views/facilityManage/common-vue/uploader.vue @@ -21,7 +21,7 @@