首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nativescript ImageSource HTTP Post

Nativescript ImageSource HTTP Post
EN

Stack Overflow用户
提问于 2019-06-12 09:10:35
回答 1查看 461关注 0票数 0

我正在尝试上传从Nativescript Camera Plus插件(类型为ImageSource)拍摄的图像,并使用Nativescript HTTP Form Data插件将其上传到我的应用程序接口服务器。我已经使用Postman测试了我的后端(Django),并且工作正常。我不知道如何从ImageSource转到包含该图像的实际PNG/JPG文件,以便单独上传该图像(而不是ImageSource数据)。

我尝试过使用ImageSource对象本身,但它发送了一个空文件。然后我尝试了HTTPFormData插件的演示,并使用了UIImageRepresentation和位图的东西(ios/Android),但它仍然提交一个空文件。

代码语言:javascript
复制
let fd = new TNSHttpFormData();

    let params = [];

    let imageData: any;
        if(this.scannedID.image_data) {
            if(this.scannedID.image_data.ios) {
                console.log("iOS" + this.scannedID.image_data.width + " " + this.scannedID.image_data.height);
                imageData = this.scannedID.image_data.ios.UIImagePNGRepresentation;
            } else {
                let bitmapImage = this.scannedID.image_data.android.graphics.Bitmap;
                let stream = this.scannedID.image_data.android.java.io.ByteArrayOutputStream();
                bitmapImage.compress("PNG", 100, stream);
                let byteArray = stream.toByteArray();
                bitmapImage.recycle();

                imageData = byteArray;
            }
        }
        let param: TNSHttpFormDataParam = {
            data: imageData,
            contentType: 'image/png',
            fileName: 'idtest1.png',
            parameterName: 'image'
        };
        params.push(param);


    console.log("Parameters: " + JSON.stringify(param));
    console.log(params[0].data);
    try {
        const response: TNSHttpFormDataResponse = await fd.post(this.apiURL + 'VerificationID/', params, { headers: this.createRequestHeader(false) } );
        console.log(response);
        return response;
    } catch (e) {
        console.log(e);
        return e;
    }

它打印出宽度/高度,所以我知道图像在那里。我相信我的.ios.UIImagePNGRepresentation没有像我想要的那样返回PNG。如果我输出与文件一起创建的参数,它将输出除" data“(应该是实际的文件数据)之外的所有对象数据。我不确定从这里到哪里去。任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2019-06-12 17:22:50

我不知道你怎么找到this.scannedID.image_data的。

但是如果你使用的是相机加插件,它将返回一个应用了适当宽度和高度的image-asset,在图像资源上使用getImageAsync(callback)方法应该会返回UIImage (iOS) /位图(Android)。

在你的照片捕捉事件中可能是这样的,

代码语言:javascript
复制
function onPhotoCaptured(args) {
  const asset = args.data;
  asset.getImageAsync((image, error) => {
        let imageData: any;
        if(image) {
            if(asset.ios) {
                imageData = UIImagePNGRepresentation(image);
            } else {
                let bitmapImage: android.graphics.Bitmap = image;
                let stream = new java.io.ByteArrayOutputStream();
                bitmapImage.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, stream);
                let byteArray = stream.toByteArray();
                bitmapImage.recycle();

                imageData = byteArray;
            }
        }
  });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56553421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档