拍照上传功能可以保存到相册,但是在上传到服务器时一直显示上传中,已知服务器接口正常
时间: 2024-12-17 12:18:44 浏览: 9
根据您提供的代码,拍照上传功能在调用 `uni.uploadFile` 方法上传文件时可能遇到了一些问题。以下是可能导致上传状态始终为“上传中”的几个原因及解决方法:
1. **网络问题**:确保设备与服务器之间的网络连接正常。
2. **文件路径问题**:确认 `tempFilePaths[0]` 是否正确指向了照片的临时文件路径。
3. **服务器响应问题**:确保服务器返回的数据格式正确,并且能够被解析。
4. **授权问题**:检查 `header` 中的 `Authorization` 是否有效,以及是否具有上传权限。
### 具体排查步骤
1. **日志输出**:在 `uploadFilePromise` 方法中增加日志输出,查看具体的请求和响应情况。
```javascript
uploadFilePromise(url) {
const header = { 'Authorization': `Bearer ${getToken()}` };
return new Promise((resolve, reject) => {
uni.uploadFile({
url: 'http://10.118.50.18:8001/api/danger_rectify_record/upload',
filePath: url,
header: header,
name: 'fileinput',
success: (res) => {
console.log('Upload success:', res);
resolve(res.data);
},
fail: (err) => {
console.error('Upload failed:', err);
reject(err);
}
});
});
}
```
2. **检查文件路径**:在 `chooseImage` 成功回调中打印 `tempFilePaths`,确保路径正确。
```javascript
takePhoto() {
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['camera'],
success: (res) => {
const tempFilePaths = res.tempFilePaths;
console.log('Selected image path:', tempFilePaths[0]);
this.fileList = [
{ url: tempFilePaths[0], status: 'uploading', message: '上传中' }
];
this.afterRead({ file: [{ url: tempFilePaths[0] }] });
uni.saveImageToPhotosAlbum({
filePath: tempFilePaths[0],
success: function () {
uni.showToast({ title: '已保存到相册', icon: 'success' });
},
fail: function (err) {
uni.showToast({ title: '保存失败,请检查权限设置', icon: 'none' });
console.error('保存图片到相册失败:', err);
}
});
}
});
}
```
3. **检查服务器响应**:确保服务器返回的数据格式正确,并且能够被解析。可以在 `success` 回调中增加错误处理逻辑。
```javascript
success: (res) => {
try {
const parsedResult = JSON.parse(res.data);
console.log('Parsed server response:', parsedResult);
resolve(parsedResult);
} catch (error) {
console.error('Failed to parse server response:', error);
reject(error);
}
},
```
通过以上步骤,您可以更详细地了解上传过程中可能出现的问题,并进行相应的调试和修复。希望这些信息对您有所帮助!
阅读全文