超音速 - 如何在多部分帖子中发布从手机摄像头获取的图像

时间:2014-12-18 15:34:55

标签: android angularjs hybrid-mobile-app steroids

好的,这是问题的破败:

我正在使用AppGyver类固醇和超音速结合AngularJS来开发Android混合应用程序,该应用程序针对我无法影响的API(无法更改以允许我的问题得到解决)。

Appgyver Supersonic提供了一种使用手机拍照拍照的方法,并在拍完照片后为结果提供了两个选项 - 您可以获取拍摄照片的文件网址,也可以获取图片作为dataUrl。

我必须使用在其中包含此文件的表单数据的帖子请求来定位API。作为一个解决方案,我尝试将响应字符串加载到blob对象中(通过中间转换为字节数组)并发布所有这些,如下所示:

var options = {
    allowEdit: true,
    targetWidth: 300,
    targetHeight: 300,
    destinationType: "dataURL",
};

supersonic.media.camera.takePicture(options).then(function (result) {
    var imageGotten = result;

    var bytes = new Int16Array(imageGotten.length);
    for (var i = 0; i < imageGotten.length; i++) {
        bytes[i] = imageGotten.charCodeAt(i);
    }

    var imageToPost = new Blob([bytes], { type: "image/jpeg" });

    var formData = new FormData();
    formData.append('file', imageToPost);

    $http({
        url: "API_method_that_is_being_targeted",
        method: "POST",
        transformRequest: angular.identity,
        headers: { 'Content-Type': undefined },
        data: formData
    })
    .success(function (result) {
        //further logic
    });

});

这可以正常工作,因为它发布数据并从服务器获得成功结果。问题是,当我从服务器获取数据时,由于它的损坏,我收到的图像无法显示。 API的管理员向我保证,如果我可以发布一个File对象而不是我现在所做的Blob对象,这将得到解决。但是文件对象,据我所知,从研究主题一点(当然可能是错误的),不能直接在javascript中实例化,而只能从文件输入字段获取,而Blob对象是继承自File的东西,因此,如果我发布一个或另一个应该没关系。

我是否遗漏了某些东西,如果是这样,你建议解决这个问题的方法是什么。提前谢谢大家。

0 个答案:

没有答案