Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何使用cordova api将照片上载到azure blob存储?_Angularjs_Cordova_Azure_Phonegap Build_Azure Storage Blobs - Fatal编程技术网

Angularjs 如何使用cordova api将照片上载到azure blob存储?

Angularjs 如何使用cordova api将照片上载到azure blob存储?,angularjs,cordova,azure,phonegap-build,azure-storage-blobs,Angularjs,Cordova,Azure,Phonegap Build,Azure Storage Blobs,我正在尝试使用Cordova api将照片从移动设备上载到azure blob存储。我就是不能让它工作。任何想法都会大有裨益 上传到blob的数据如下所示 开始--> --+++++org.apache.cordova.formBoundary 内容配置:表单数据;name=“file”;filename=“测试” 内容类型:图像/jpeg 内容长度:46785 ���� .... 在您的azure帐户上创建blob存储服务,然后将blob存储库导入您的网站。将图像发送到Azure上托管的网站,

我正在尝试使用Cordova api将照片从移动设备上载到azure blob存储。我就是不能让它工作。任何想法都会大有裨益

上传到blob的数据如下所示

开始-->

--+++++org.apache.cordova.formBoundary

内容配置:表单数据;name=“file”;filename=“测试”

内容类型:图像/jpeg

内容长度:46785

���� ....


在您的azure帐户上创建blob存储服务,然后将blob存储库导入您的网站。将图像发送到Azure上托管的网站,然后派生一项任务将其发送到blob存储。事实上,您使用Cordova作为客户并不重要。服务器不应该知道平台客户端是谁,只知道如何处理请求。

我通过将其转换为base64字符串来实现这一点。您可以使用javascript实现这一点。

我也尝试了FileReader对象,但reader.onloadend从未被触发。不知道为什么…你没有提到你遇到的错误老实说,我不知道你的代码,但这篇文章可能会帮助你。我的申请是在这篇文章的帮助下完成的。遵循它这确实是错误的方法,您应该将图像/文件从Cordova上传到简单的HTTP处理程序(服务器端php、apsx或python),该处理程序将使用可用的API将文件存储在Azure上。你将如何保护你的Azure Blob存储密钥,你不能将其与你的应用程序一起分发,这是不安全的,当你需要更改它们时,你将面临麻烦。@Akash,谢谢你的评论。我不确定是否理解azure blob存储是如何工作的,但客户端没有存储密钥,所以不用担心。但是您确实提出了一个很好的建议,将其作为多部分/表单发布,并从服务器端维护图像。我现在所做的工作适用于web站点,但不适用于phonegap。FileTransfer插件强制您使用multipart,从而破坏上传的照片。我可以上传,但不是作为字节数组,而是作为编码64。我可能会考虑上传一个普通的多部分提交。我的做法也是人民女士推荐的。谢谢你的回答。仅供参考。为了发布到azure blob存储,需要获取唯一生成的uri才能发布它们。因此,我从azure服务获得一个唯一的post url作为回调结果,并且我能够执行PUT,但图像以64位编码格式上传,而不是azure blob存储使用的字节数组。问题是永远不会触发FileReader、reader.onloaded。它不会产生错误或什么都没有,只是想补充一点,我可以使用网站上传字节数组,没有问题,只是不是phonegap-ionic
/*Cordova Camera API calls*/
$scope.takePic = function (type) {

    if (navigator.camera != undefined) {
        if (type == 'PHOTOLIBRARY')
            type = Camera.PictureSourceType.PHOTOLIBRARY;
        else if (type == 'CAMERA')
            type = Camera.PictureSourceType.CAMERA;

        var options = {
            quality: 45,
            destinationType: Camera.DestinationType.DATA_URL,
            sourceType: type,
            allowEdit: true,
            encodingType: Camera.EncodingType.JPEG,
            saveToPhotoAlbum: false
        }
        navigator.camera.getPicture(onSuccess, onFail, options); 
    }
}

$scope.message = "Add an image";
var onSuccess = function (DATA_URL) {
    $scope.message = "Choose another image"; 
    $scope.postForm.onFileSelect = DATA_URL;
    $scope.$apply();
};
var onFail = function (e) {
    $scope.picData = null; 
    $scope.message = "On fail " + e;
};

//$scope.blobSasUrl is url to upload to azure blob storage
var xhr = new XMLHttpRequest();
xhr.onerror = fail;
xhr.onloadend = uploadCompleted;
xhr.open("PUT", $scope.blobSasUrl);
xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob');
xhr.setRequestHeader('x-ms-blob-content-type', 'image/jpeg');
xhr.send($scope.postForm.onFileSelect);
//This is not working (error)
var reader = new FileReader();
reader.onloadend = function(evt) {
    console.log(evt.target.result);  //nothing happens here
}
reader.readAsDataURL(file);  //file is either DATA_URI or FILE_URI