189 lines
4.3 KiB
Markdown
189 lines
4.3 KiB
Markdown
|
|
# 单图上传功能说明
|
|||
|
|
|
|||
|
|
## 功能概述
|
|||
|
|
|
|||
|
|
本项目提供了完整的单图上传功能,支持选择图片、上传到七牛云、返回图片URL。
|
|||
|
|
|
|||
|
|
## 文件结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
├── api/upload.js # 上传相关API
|
|||
|
|
├── pages/image-upload/ # 上传页面
|
|||
|
|
│ └── image-upload.vue
|
|||
|
|
├── pages/image-upload-demo/ # 演示页面
|
|||
|
|
│ └── image-upload-demo.vue
|
|||
|
|
└── examples/ # 使用示例
|
|||
|
|
└── single-image-upload-usage.vue
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 核心功能
|
|||
|
|
|
|||
|
|
### 1. API接口 (`api/upload.js`)
|
|||
|
|
|
|||
|
|
#### 获取七牛云上传Token
|
|||
|
|
```javascript
|
|||
|
|
import { getQiniuUploadToken } from '@/api/upload.js'
|
|||
|
|
|
|||
|
|
const res = await getQiniuUploadToken()
|
|||
|
|
if (res.code === 200) {
|
|||
|
|
const token = res.data?.token || res.data?.uploadToken || res.token || res.data
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 上传图片到七牛云
|
|||
|
|
```javascript
|
|||
|
|
import { uploadToQiniu } from '@/api/upload.js'
|
|||
|
|
|
|||
|
|
const result = await uploadToQiniu(filePath, token, key)
|
|||
|
|
const imageUrl = `https://api.ccttiot.com/${result.key}`
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 上传页面 (`pages/image-upload/image-upload.vue`)
|
|||
|
|
|
|||
|
|
完整的图片上传页面,包含:
|
|||
|
|
- 图片选择功能
|
|||
|
|
- 预览功能
|
|||
|
|
- 上传进度显示
|
|||
|
|
- 错误处理
|
|||
|
|
- 结果展示
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 方法一:跳转到上传页面
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 跳转到上传页面
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: '/pages/image-upload/image-upload'
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 监听上传成功事件
|
|||
|
|
uni.$on('image-upload-success', (imageUrl) => {
|
|||
|
|
console.log('上传成功:', imageUrl)
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法二:内嵌上传功能
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
import { getQiniuUploadToken, uploadToQiniu } from '@/api/upload.js'
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
selectedImage: '',
|
|||
|
|
qiniuToken: '',
|
|||
|
|
uploading: false
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
methods: {
|
|||
|
|
// 选择图片
|
|||
|
|
chooseImage() {
|
|||
|
|
uni.chooseImage({
|
|||
|
|
count: 1,
|
|||
|
|
success: (res) => {
|
|||
|
|
this.selectedImage = res.tempFilePaths[0]
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 上传图片
|
|||
|
|
async uploadImage() {
|
|||
|
|
if (!this.selectedImage) return
|
|||
|
|
|
|||
|
|
this.uploading = true
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
// 获取token
|
|||
|
|
if (!this.qiniuToken) {
|
|||
|
|
const res = await getQiniuUploadToken()
|
|||
|
|
this.qiniuToken = res.data?.token || res.data?.uploadToken || res.token || res.data
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 生成文件名
|
|||
|
|
const key = `uploads/${Date.now()}_${Math.random().toString(36).slice(2)}.jpg`
|
|||
|
|
|
|||
|
|
// 上传
|
|||
|
|
const result = await uploadToQiniu(this.selectedImage, this.qiniuToken, key)
|
|||
|
|
const imageUrl = `https://api.ccttiot.com/${result.key}`
|
|||
|
|
|
|||
|
|
console.log('上传成功:', imageUrl)
|
|||
|
|
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('上传失败:', error)
|
|||
|
|
} finally {
|
|||
|
|
this.uploading = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 页面配置
|
|||
|
|
|
|||
|
|
确保在 `pages.json` 中注册了相关页面:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"pages": [
|
|||
|
|
{
|
|||
|
|
"path": "pages/image-upload/image-upload",
|
|||
|
|
"style": {
|
|||
|
|
"navigationBarTitleText": "图片上传",
|
|||
|
|
"navigationStyle": "custom"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"path": "pages/image-upload-demo/image-upload-demo",
|
|||
|
|
"style": {
|
|||
|
|
"navigationBarTitleText": "图片上传演示",
|
|||
|
|
"navigationStyle": "custom"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 功能特点
|
|||
|
|
|
|||
|
|
### ✅ 已实现功能
|
|||
|
|
- [x] 图片选择和预览
|
|||
|
|
- [x] 七牛云上传
|
|||
|
|
- [x] 上传进度显示
|
|||
|
|
- [x] 错误处理和提示
|
|||
|
|
- [x] 结果URL展示
|
|||
|
|
- [x] URL复制功能
|
|||
|
|
- [x] 多种使用方式
|
|||
|
|
- [x] 完整的示例代码
|
|||
|
|
|
|||
|
|
### 🔧 技术特性
|
|||
|
|
- 支持相册和相机选择
|
|||
|
|
- 自动获取七牛云上传Token
|
|||
|
|
- 智能Token字段解析
|
|||
|
|
- 唯一文件名生成
|
|||
|
|
- 完整的错误处理
|
|||
|
|
- 响应式UI设计
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **Token获取**:确保后端API `/common/qiniu/uploadInfo` 正常工作
|
|||
|
|
2. **域名配置**:七牛云上传域名已配置为 `https://up-z2.qiniup.com`
|
|||
|
|
3. **图片域名**:图片访问域名配置为 `https://api.ccttiot.com`
|
|||
|
|
4. **文件格式**:支持 JPG、PNG 等常见图片格式
|
|||
|
|
5. **文件大小**:建议图片大小不超过 5MB
|
|||
|
|
|
|||
|
|
## 调试
|
|||
|
|
|
|||
|
|
如果遇到上传问题,可以:
|
|||
|
|
|
|||
|
|
1. 检查控制台日志
|
|||
|
|
2. 验证Token获取是否成功
|
|||
|
|
3. 确认网络连接正常
|
|||
|
|
4. 检查七牛云配置是否正确
|
|||
|
|
|
|||
|
|
## 示例页面
|
|||
|
|
|
|||
|
|
访问以下页面查看完整示例:
|
|||
|
|
- `/pages/image-upload-demo/image-upload-demo` - 演示页面
|
|||
|
|
- `/examples/single-image-upload-usage.vue` - 使用示例
|