HomeLease/README_AVATAR_UPLOAD.md

163 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 头像上传功能说明
## 功能概述
本功能允许用户上传和更换个人头像,支持从相册选择或拍照两种方式。
## API接口
- **接口地址**: `PUT /app/user/avatar`
- **请求格式**: `form-data`
- **参数名**: `avatarfile`
- **参数类型**: `file`
## 实现文件
1. **API函数**: `api/user/user.js` - `uploadAvatar()`
2. **页面组件**: `pages/set/set.vue` - 头像设置页面
3. **请求工具**: `utils/request.js` - 统一请求处理(包含文件上传方法)
## 使用流程
### 1. 用户操作流程
1. 进入设置页面 (`pages/set/set.vue`)
2. 点击"头像"设置项
3. 选择"从相册选择"或"拍照"
4. 选择或拍摄图片
5. 系统自动上传并更新头像
### 2. 技术实现流程
1. **选择图片**: 使用 `uni.chooseImage()` 选择图片
2. **上传文件**: 使用 `utils/request.js` 中的 `uploadFile()` 方法上传到服务器
3. **更新显示**: 更新本地存储和页面显示
4. **通知更新**: 通过事件通知其他页面更新头像
## 关键代码
### 统一文件上传方法 (utils/request.js)
```javascript
export function uploadFile(url, filePath, name = 'file', formData = {}, options = {}) {
// 自动获取token和配置
// 统一错误处理
// 支持超时设置
// 自动解析响应
}
```
### API函数 (api/user/user.js)
```javascript
export function uploadAvatar(filePath) {
return uploadFile('/app/user/avatar', filePath, 'avatarfile', {}, {
timeout: 60000
}).then(data => {
// 更新本地存储
// 通知其他页面
return data
})
}
```
### 页面方法 (pages/set/set.vue)
```javascript
// 显示头像选择器
showAvatarPicker() {
uni.showActionSheet({
itemList: ['从相册选择', '拍照'],
success: (res) => {
if (res.tapIndex === 0) {
this.chooseImage('album')
} else if (res.tapIndex === 1) {
this.chooseImage('camera')
}
}
})
}
// 选择图片
chooseImage(sourceType) {
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: [sourceType],
success: (res) => {
this.uploadAvatarFile(res.tempFilePaths[0])
}
})
}
```
## 技术优势
### 1. 统一请求管理
- ✅ 使用 `utils/request.js` 中的 `uploadFile()` 方法
- ✅ 自动获取token和配置
- ✅ 统一的错误处理和响应解析
- ✅ 支持超时设置和自定义配置
### 2. 简化API调用
- ✅ API函数代码更简洁
- ✅ 专注于业务逻辑处理
- ✅ 自动处理token和认证
- ✅ 统一的错误处理机制
### 3. 更好的维护性
- ✅ 所有网络请求都通过统一的工具管理
- ✅ 配置变更只需修改一处
- ✅ 错误处理逻辑统一
- ✅ 便于调试和监控
## 权限配置
### Android权限
已在 `manifest.json` 中添加:
- `READ_EXTERNAL_STORAGE` - 读取外部存储
- `WRITE_EXTERNAL_STORAGE` - 写入外部存储
- `CAMERA` - 相机权限
### 微信小程序权限
建议在 `manifest.json` 中添加:
```json
"permission": {
"scope.writePhotosAlbum": {
"desc": "用于保存头像图片"
}
}
```
## 测试方法
### 1. 功能测试
1. 点击设置页面的头像设置项
2. 选择一张图片
3. 查看控制台日志确认上传过程
4. 验证头像是否成功更新
### 2. 调试信息
- 控制台会输出详细的请求和响应日志
- 包括文件路径、请求头、响应数据等信息
- 统一的错误处理和提示
## 注意事项
1. **文件大小**: 建议限制上传文件大小,避免过大文件影响性能
2. **文件格式**: 建议只允许图片格式jpg, png, gif等
3. **网络处理**: 已添加超时和错误处理机制
4. **权限检查**: 在Android和iOS上需要相应的存储和相机权限
5. **响应格式**: 服务器应返回标准的JSON响应格式
## 错误处理
常见错误及解决方案:
- **网络错误**: 检查网络连接和服务器状态
- **权限错误**: 确保已授予存储和相机权限
- **文件格式错误**: 确保上传的是有效的图片文件
- **服务器错误**: 检查服务器端接口是否正常工作
- **Token错误**: 确保用户已登录且token有效
## 扩展功能
可以考虑添加的功能:
1. 图片压缩和裁剪
2. 上传进度显示
3. 多图片上传
4. 图片预览功能
5. 上传历史记录
6. 断点续传
7. 文件类型验证