借鉴你的鸿蒙上传图片到服务器方法遇到13400001,
具体错误是
[request_service_proxy.cpp Create 77] End send create request, failed: 13400001,
[request_manager_impl.cpp Create 74] Request create, seq: 0, failed: 13400001,
[js_task.cpp CreateExec 202] End create task in JsTask CreateExec, seq: 0, failed: 13400001,
[js_task.cpp operator() 157] End task create in AsyncCall output, seq: 0, failed:13400001,
[napi_utils.cpp operator() 633] errorCode: 13400001, errInfo:
文件上传失败: Error: file operation error
我的代码是
export async function uploadAvatar(file: UploadFile) {
const saveDir = getContext().cacheDir
const fileParams: request.File[] = []
try {
const imageFile = fileIo.openSync(file.uri, fileIo.OpenMode.READ_ONLY)
// 1. 打开文件(返回File对象)
const uniqueName = util.generateRandomUUID() + '.jpg'
// 将相册文件拷贝到沙箱
fileIo.copyFileSync(imageFile.fd, saveDir + '/' + uniqueName)
fileParams.push({
filename: uniqueName, // 文件名称
name: 'file', // 接口的参数名
type: 'jpg', // 文件后缀
uri: `internal://cache/${uniqueName}`// 应该是文件放到cache目录下 如果是cache协议 它会自动找这个文件
})
// 发送请求
return await request.uploadFile(getContext(), {
method: 'POST',
url: 'http://10.0.2.2:8080/api/files/upload/avatar',
header: {
'Content-Type': 'multipart/form-data',
'Authorization': `Bearer ${AppStorage.get('token')}`
},
files: fileParams,
data: []
});
} catch (err) {
console.error('文件上传失败:', err);
throw new Error('文件上传失败: ' + (err instanceof Error ? err.message : String(err)));
}
}
private async handleUpdate() {
if (this.isUpdating) return;
this.isUpdating = true;
try {
// 先上传头像(如果有)
if (this.avatarFile) {
const uploadFile: UploadFile = {
uri: this.avatarFile.uri,
name: this.avatarFile.name,
type: this.avatarFile.type,
size: this.avatarFile.size
};
const uploadRes = await uploadAvatar(uploadFile);
uploadRes.on("fail", () => {
// 上传失败
AlertDialog.show({
message: "上传失败"
})
})
uploadRes.on("headerReceive", (headers: object) => {
// 响应回来的数据
if (headers["body"]) {
// 转换为对象形式
const result = JSON.parse(headers["body"]) as ServiceResponse<string>
// result.code === 200为成功时的状态码
if (result.code === 200) {
this.avatarFile.uri = result.data
}
}
})
}