微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nativescript 后台 Http 请求错误代码 400

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?