1

好的,这是问题的概要:

我将 AppGyver 类固醇和超音速与 AngularJS 结合使用来开发一个 Android 混合应用程序,该应用程序针对我无法影响的 API(它无法更改以解决我的问题)。

Appgyver Supersonic 提供了一种使用手机相机拍照的方法,并提供了两种拍照后的结果选项 - 您可以获取所拍照片的文件 url,也可以将图片作为 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 对象,这将得到解决。但是,据我对主题的研究(当然可能是错误的),File 对象不能直接在 javascript 中实例化,而只能从文件输入字段中获取,而 Blob 对象是从 File 继承的东西,因此,我发布一个或另一个都无关紧要。

我有什么遗漏的吗,如果有,您有什么建议可以解决这个问题。提前感谢大家。

4

0 回答 0