好的,这是问题的破败:
我正在使用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的东西,因此,如果我发布一个或另一个应该没关系。
我是否遗漏了某些东西,如果是这样,你建议解决这个问题的方法是什么。提前谢谢大家。