如何解决Nativescript 后台 Http 请求错误代码 400
我正在尝试将图像文件上传到我的后端。但是,无论是哪种设备(Android 或 IOS),我都会收到 400 错误代码。不知道我做错了什么,但我按照@nativescript/background-http 上的文档上传文件
- Nativescript 版本:7
- 角度版本:10
- Android 和 IOS 上的问题
控制台日志:
shared.service.ts:48 File exists: true
shared.service.ts:54 photo Saved: true
Photo File: {
"_path": "/data/user/0/org.nativescript.WorkoutTracker/files/Stone0.png","_name": "Stone0.png","_extension": ".png"
}
shared.service.ts:164 upload progress: 0.1%
shared.service.ts:164 upload progress: 100.0%
profile.component.ts:83
Server error: {
"eventName": "error","object": {
"_observers": {
"progress": [
{}
],"error": [
{}
],"complete": [
{}
]
},"_session": {
"_id": "img_upload"
},"_id": "img_upload{1}","_description": "Uploading","_upload": 120143,"_totalUpload": 120143,"_status": "error"
},"error": null,"responseCode": 400,"response": {}
}
这是代码:
imageUpload(photo: File,token: string) {
let observer: Subscriber<Image>;
const imageUpload$ = new Observable<Image>(
(observ) => (observer = observ)
);
const imgurl = apiDomain + images;
console.log("Filee exists:",File.exists(photo.path));
const params = [];
const param = {
name: "photo",filename: photo.path,mimeType: "image/jpeg",};
params.push(param);
const headers = {
// "Content-Type": "application/protobuf",'Authorization': `Bearer ${token}`,"Content-Type": "application/octet-stream",// 'Accept': 'application/protobuf',// "File-Name": photo.name
};
// const headers = new HttpHeaders({
// Authorization: "Bearer " + token,// // 'Accept': 'application/protobuf',// "Content-Type": "application/protobuf",// // "Content-Type": "application/octet-stream",// });
// console.log("Content-Type:",headers);
this.fileUpload<Image>(imgurl,{ requestType: "POST",headers },params).subscribe(
(res) => {
if (res instanceof Image) {
observer.next(res);
}
},(err) => {
observer.error(err);
}
);
return imageUpload$;
}
fileUpload<E>(uri: string,body: { requestType?: "POST" | "GET",headers},params: any[]) {
let observer: Subscriber<E | ProgressEventData | ResultEventData>;
const request$ = new Observable<E | ProgressEventData | ResultEventData>((observ) =>(observer = observ));
const reqSession = session("file-upload");
const request = {
url: uri,method: body.requestType ?? "POST",description: "Uploading",headers: body.headers,};
console.log("request",request);
console.log("params",params);
const task = reqSession.multipartUpload(params,request);
task.on("progress",(evt) => {
console.log(
"upload progress: " +
((evt.currentBytes / evt.totalBytes) * 100).toFixed(1) +
"%"
);
observer.next(evt);
});
task.on("error",(evt) => {
console.log("upload error");
observer.error(evt);
});
task.on("complete",(evt) => {
const event: any = evt;
if (global.isIOS) {
if (event.responseCode >= 200 && event.responseCode < 300) {
console.log("success",event);
const object: E = event.object;
observer.next(object);
observer.complete();
} else if (
event.responseCode >= 400 &&
event.responseCode < 500
) {
const errorResp: ErrorEventData = event;
observer.error(errorResp);
}
} else if (global.isAndroid) {
console.log("success",event.responseCode,event);
const object: E = event.object;
observer.next(object);
observer.complete();
}
});
return request$;
}
解决方法
400 错误是由于我的参数中的名称
const param = {
name: "photo",// This needed to match the name in the backend
filename: photo.path,mimeType: "image/jpeg",};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。