# 图片上传组件安全改造说明 ## 📋 概述 为了配合MinIO安全改造,图片上传组件 `ImageUpload/index.vue` 已经进行了安全升级,支持bucket密码验证和预签名URL机制。 ## 🔧 主要改动 ### 1. 新增安全功能 - ✅ **Bucket密码验证**: 支持在文件上传时验证bucket访问密码 - ✅ **自定义上传**: 使用 `:http-request="customUpload"` 替代默认上传 - ✅ **密码输入对话框**: 当需要密码验证时,弹出密码输入界面 - ✅ **安全预览**: 文件预览时使用安全机制 ### 2. 新增Props参数 ```typescript interface Props { // ... 原有参数 ... // bucket访问密码 bucketPassword?: string; // 是否启用bucket密码验证 enablePasswordValidation?: boolean; } ``` ## 🚀 使用方法 ### 基础用法(不启用密码验证) ```vue ``` ### 启用密码验证 ```vue ``` ### 动态密码验证 ```vue ``` ## 🔐 密码验证流程 ### 1. 自动密码验证 - 当 `enablePasswordValidation=true` 且 `bucketPassword` 有值时 - 组件会自动在请求头中添加 `bucket-password` 参数 - 后端验证密码后允许上传 ### 2. 手动密码验证 - 当 `enablePasswordValidation=true` 且 `bucketPassword` 为空时 - 用户选择文件后,弹出密码输入对话框 - 用户输入密码后,组件验证密码并执行上传 ## 📝 上传接口变更 ### 原有接口 ```javascript // 直接上传到 /resource/oss/upload const uploadImgUrl = baseUrl + '/resource/oss/upload' ``` ### 新安全接口 ```javascript // 使用自定义上传方法 const customUpload = async (options) => { const formData = new FormData() formData.append('file', options.file) const response = await fetch(uploadImgUrl.value, { method: 'POST', headers: { ...headers.value, 'bucket-password': bucketPassword || passwordForm.bucketPassword || '' }, body: formData }) // 处理响应... } ``` ## 🎯 预览功能升级 ### 安全预览 ```javascript const handlePictureCardPreview = async (file) => { try { if (file.ossId) { // 使用安全预览机制 dialogImageUrl.value = file.url // 简化处理,实际应调用安全预览API } else { // 直接使用URL预览 dialogImageUrl.value = file.url } dialogVisible.value = true } catch (error) { console.error('预览失败:', error) proxy?.$modal.msgError('预览失败') } } ``` ## ⚠️ 注意事项 ### 1. 后端接口要求 - 上传接口需要支持 `bucket-password` 请求头 - 需要验证bucket密码的有效性 - 返回标准的响应格式:`{ code: 200, data: { fileName, url, ossId } }` ### 2. 密码安全 - 密码不会在组件中明文存储 - 密码验证失败时会提示用户重新输入 - 建议使用强密码并定期更换 ### 3. 兼容性 - 组件保持向后兼容,不启用密码验证时行为不变 - 原有的文件上传、预览、删除功能正常工作 ## 🔄 迁移指南 ### 从旧版本迁移 1. **不启用密码验证**: 无需修改,组件自动兼容 2. **启用密码验证**: 添加 `enable-password-validation="true"` 属性 3. **提供密码**: 通过 `bucket-password` 属性或对话框输入 ### 示例迁移 ```vue ``` ## 🧪 测试建议 ### 1. 功能测试 - [ ] 基础文件上传功能正常 - [ ] 密码验证功能正常 - [ ] 密码错误时提示正确 - [ ] 预览功能正常 - [ ] 删除功能正常 ### 2. 安全测试 - [ ] 无密码时无法上传 - [ ] 错误密码时无法上传 - [ ] 密码验证失败时提示正确 - [ ] 密码不会在控制台泄露 ### 3. 兼容性测试 - [ ] 不启用密码验证时功能正常 - [ ] 原有页面无需修改即可使用 - [ ] 文件格式限制正常 - [ ] 文件大小限制正常 ## 📚 相关文档 - [MinIO安全改造方案](../中间件配置/minio-security-solution.md) - [Bucket密码管理API](../API/用户认证登录API.md) - [文件访问安全API](../API/API文档基础规范.md) --- **更新时间**: 2025-01-27 **版本**: v2.0.0 **维护者**: 开发团队