HarmonyOS 鸿蒙Next App上传文件问题
HarmonyOS 鸿蒙Next App上传文件问题
就是我按照axios文档 上传 他就给我 error:Error: the parameters check fails Parameter verification failed, Parse config files error
2 回复
打开文件然后转成ArrayBuffer 的,参考文档:https://gitee.com/openharmony-sig/ohos_axios#当上传的内容为arraybuffer时用法如下 先把相册的URL通过文件打开的方式读取到cache下面,再通过axios上传url的方式上传
let file = fs.openSync(uri, fs.OpenMode.CREATE);
// 复制文件到缓存目录下
fs.copyFileSync(file.fd, cacheDir + '/test.jpeg')
推荐用url的,你看看能不能运行,修改你的代码:
import { common, Permissions } from '@kit.AbilityKit';
import { showToastMessage } from '../utils/CommonUtils';
import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import Logger from '../utils/Logger';
import permissionUtils from '../utils/PermissionUtils';
import axios, { AxiosError, AxiosResponse, FormData } from '@ohos/axios';
import fs from '@ohos.file.fs';
const permissions: Array<Permissions> = ['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA',
'ohos.permission.MEDIA_LOCATION'];
const TAG = 'MainPage';
// 获取应用文件路径
let context = getContext(this) as common.UIAbilityContext;
let cacheDir = context.cacheDir;
@Entry
@Component
@Preview
struct Index {
@State message: string = 'Hello World';
@State uri: Resource | string | undefined = $r('app.media.foreground');
@State netContent: string = ""
@State localContent: string = ""
build() {
Stack({ alignContent: Alignment.Center }) {
Column() {
//touxiang
Image(this.uri).width('100lpx').height('100lpx')
Button('从相册取一张').width('100%').onClick(() => {
const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
permissionUtils.requestPermissions(context, permissions,
(allGranted: boolean, onGranted: Array<Permissions>, onDenied: Array<Permissions>) => {
if (allGranted) {
let array: string[];
try {
let PhotoSelectOptions = new picker.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
PhotoSelectOptions.maxSelectNumber = 1;
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => {
Logger.info(TAG,
'PhotoViewPicker.select successfully, PhotoSelectResult uri: ' +
JSON.stringify(PhotoSelectResult));
if (PhotoSelectResult !== null && PhotoSelectResult !== undefined) {
array = PhotoSelectResult['photoUris'];
array.forEach((value) => {
//选的相片的URI
let file = fs.openSync(value, fs.OpenMode.CREATE);
// 复制文件到缓存目录下
fs.copyFileSync(file.fd, cacheDir + '/test.jpg')
this.uploadImg('internal://cache/test.jpg')
})
}
}).catch((err: BusinessError) => {
Logger.error(TAG, 'PhotoViewPicker.select failed with err: ' + JSON.stringify(err));
});
} catch (err) {
Logger.error(TAG, 'PhotoViewPicker failed with err: ' + err);
}
} else {
showToastMessage("权限" + allGranted + onGranted + onDenied)
}
})
})
Text('upload 的 try catch 日志').width('100%').fontWeight(700)
Text(this.localContent).width('100%')
Text('网络的 的 日志').width('100%').fontWeight(700)
Text(this.netContent).width('100%')
}
}
.height('100%')
.width('100%')
}
uploadImg(uri: string) {
//uri转ArrayBuffer
let formData = new FormData()
try {
formData.append('file', 'internal://cache/test.jpg')
axios.post<string, AxiosResponse<string>, FormData>('https://appv2test.cnrmall.com/membercenter/v2/upload/uploadPic',
formData, {
headers: { 'Content-Type': 'multipart/form-data' },
context: getContext(this),
}).then((res: AxiosResponse<string>) => {
this.uri = uri;
showToastMessage("成功上传" + JSON.stringify(res.data))
this.netContent = JSON.stringify(res.data)
console.info("gwl result" + JSON.stringify(res.data));
}).catch((err: AxiosError) => {
showToastMessage("上传失败" + JSON.stringify(err))
this.netContent = JSON.stringify(err)
console.error("gwl error:" + JSON.stringify(err));
})
} catch (err) {
this.localContent = JSON.stringify(err)
console.info('err:' + JSON.stringify(err));
}
}
}
针对HarmonyOS 鸿蒙Next App上传文件问题,以下是一些可能的解决方案:
-
配置权限:
- 确保在
module.json5
配置文件中已添加ohos.permission.INTERNET
网络权限声明,以允许应用执行网络请求。
- 确保在
-
选择文件:
- 使用文件选择器API让用户从本地选择文件,并获取文件的路径和内容。
-
构建请求:
- 使用
HttpRequest
或类似的网络请求库构建包含文件数据的POST请求,注意设置正确的Content-Type
,通常为multipart/form-data
。
- 使用
-
发送请求:
- 将构建好的请求发送到服务器,并处理服务器的响应。
-
检查与调试:
- 确保应用已正确配置网络权限。
- 验证文件路径是否正确,鸿蒙系统的文件系统可能与Android或iOS有所不同。
- 检查服务器响应,分析响应码和错误信息以确定上传失败的具体原因。
- 使用调试工具和日志记录来跟踪上传过程中的问题,以便进行故障排除。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。