我正在尝试使用Cordova api将照片从移动设备上传到azure blob存储。我似乎无法让它发挥作用。任何想法都会有很大帮助。
上传到blob的数据看起来像这样。
开始---->
- +++++ org.apache.cordova.formBoundary
内容 - 处置:表单数据;命名="文件&#34 ;;文件名="测试"
内容类型:image / jpeg
内容长度:46785
����....
< --- end
我的代码:
/*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);
编辑----- //我正在使用Camera.DestinationType.DATA_URI。我也试过FILE_URI。
//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
答案 0 :(得分:2)
在您的azure帐户上创建blob存储服务,将blob存储库导入您的网站。将图像发送到Azure上托管的网站,然后分离任务以将其发送到blob存储。您将Cordova用作客户端这一事实无关紧要。服务器不应该知道平台客户端是谁,只知道如何处理请求。
答案 1 :(得分:0)
我通过将其转换为base64字符串来实现此目的。你可以用javascript做到这一点。