HarmonyOS 鸿蒙Next uploadFromFile试用错误
HarmonyOS 鸿蒙Next uploadFromFile试用错误
试用rcp的api uploadFromFile上传文件 代码如下:
let uploadFromFile : rcp.UploadFromFile = { fileOrPath : uploadFilePath }
return new Promise((resolve, reject) => { this.session.uploadFromFile(this.assembleFullUrl(uploadPath, params), uploadFromFile) .then((resp)=>{ if (resp.statusCode == 200) { const temp: WMHttpResponse<T> = resp.toJSON() as WMHttpResponse<T>; console.debug(temp.code:${temp.code}
) console.debug(temp.error:${temp.error}
) console.debug(temp.message:${temp.message}
) console.debug(temp.data:${temp.data}
) if (temp.code == this.successCode) { resolve(temp) } else { reject(temp) } } else { let temp: WMHttpResponse<T> = resp.toJSON() as WMHttpResponse<T>; if (temp != null) { reject(temp) } else { let message: string | null = ‘no error message’; if (resp.toString() != null) { message = resp.toString(); } temp = this.dealWithError(message!); temp.code = resp.statusCode reject(temp) } } }) request错误
怎么搞
打印信息服务器返回错误码500,文件上传除此之外也可以采用@ohos.request (上传下载):https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5
下面是rcp文件上传示例:
import { rcp } from '@kit.RemoteCommunicationKit';
import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import fs from '@ohos.file.fs';
function testRcpMultiPartUpload(uris: Array<string>): void {
//根据uri获取文件对象
let file = fs.openSync(uris[0], fs.OpenMode.READ_ONLY)
console.log("文件对象:" + file)
console.log("文件路径:" + uris[0])
//获取文件状态
let stat = fs.statSync(file.fd)
//根据文件长度创建一个ArrayBuffer对象
let buf = new ArrayBuffer(stat.size)
//打印文件长度
console.log("文件长度:" + stat.size);
//读取文件
//fs.readSync是Node.js中fs模块提供的同步读取文件的方法。
//它返回一个整数值,表示实际读取到的字节数。
// 如果读取失败,它会抛出一个错误
// 如果读取成功,它会将读取到的数据存储到指定的Buffer对象中。
fs.readSync(file.fd, buf)
console.log("文件转换二进制数组:" + buf)
// 设置请求头
let headers: rcp.RequestHeaders = { "content-type": 'multipart/form-data' };
// 创建一个session会话
let session = rcp.createSession();
let multiFormFieldValue = buildMultipartFormFieldValue(file.name, buf, 'image/jpeg');
//new一个multiForm对象
let multiForm = new rcp.MultipartForm({ multiFormFieldValue });
//发送请求
let req = new rcp.Request('http://127.0.0.1:9588/upload/image', "POST", headers, multiForm);
session.fetch(req).then((response) => {
console.log("请求返回:" + response)
}).catch(() => {
console.log("请求失败:" + JSON.stringify(req))
}).finally(() => {
session.close();
});
}
function buildMultipartFormFieldValue(fileName: string, pathOrContent: string | ArrayBuffer, contentType: string): rcp.MultipartFormFieldValue {
let result: rcp.MultipartFormFieldValue = {
remoteFileName: fileName,
contentType: contentType,
//传文件二进制内容或者是文件的路径
contentOrPath: { content: pathOrContent }
}
return result;
}
@Entry
@Component
struct Index {
@State uris: Array<string> = []; // 全局变量保存图库选择的结果uri
// 接口采用promise异步返回形式,传入可选参数DocumentSelectOptions对象,返回选择文件的uri数组。
async getFileAssetsFromType() {
const photoSelectOptions = new picker.PhotoSelectOptions(); // 创建图片-音频类型文件-预览的图库选项实例
// 选择媒体文件类型和选择媒体文件的最大数目
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 选择媒体文件类型为Image
photoSelectOptions.maxSelectNumber = 2; // 选择媒体文件的最大数目
// 创建图库选择器实例,调用photoViewPicker.select()接口拉起图库界面进行文件选择,文件选择成功后,返回photoSelectResult结果集。
const photoViewPicker = new picker.PhotoViewPicker();
photoViewPicker.select(photoSelectOptions)
.then((photoSelectResult) => {
// select返回的uri权限是只读权限,需要将uri写入全局变量@State中即可进行读取文件数据操作。
this.uris = photoSelectResult.photoUris;
}).catch((err: BusinessError) => {
return;
})
}
build() {
Row() {
Column() {
Text("点击选择图片").fontSize(50).fontWeight(FontWeight.Bold)
.height("20%")
.onClick(() => {
this.getFileAssetsFromType()
})
Text("点击上传文件").fontSize(50).fontWeight(FontWeight.Bold)
.height("20%")
.onClick(() => {
testRcpMultiPartUpload(this.uris)
})
}.width('100%')
}.height('100%')
}
}
针对您提到的HarmonyOS鸿蒙系统中Next uploadFromFile
试用错误的问题,这通常可能涉及文件路径错误、权限不足、文件格式不支持或API使用不当等几种常见原因。
-
文件路径验证:请确保提供的文件路径正确无误,且该文件在指定路径下确实存在。使用绝对路径而非相对路径,以避免路径解析错误。
-
权限检查:确认您的应用已正确声明并获得了读取该文件所需的权限。在HarmonyOS中,这通常需要在
config.json
文件中声明相关权限。 -
文件格式支持:检查
uploadFromFile
方法是否支持您尝试上传的文件格式。某些API可能对文件类型有特定要求。 -
API使用正确性:仔细阅读HarmonyOS官方文档,确保
Next uploadFromFile
的使用方式符合API规范,包括参数传递、回调处理等。 -
日志与异常捕获:增加日志输出,捕捉并分析异常信息,这有助于定位问题所在。
如果以上步骤均无法解决问题,可能是系统级问题或特定环境下的异常。此时,建议直接联系官网客服以获取更专业的技术支持。官网地址是:https://www.itying.com/category-93-b0.html