我正在使用 PhoneGap 和 Intel XDK 创建一个跨平台应用程序。我不知道如何将图像从相机上传到我的 Azure Blob 存储。我正在生成我的 SAS 没有问题。当我尝试上传图像本身时,问题就来了。我有一个指向要上传的图像 (localhost) 的 URL。我首先尝试使用 XDK 提供的文件上传实用程序,如下所示:
intel.xdk.file.uploadToServer(imageUrl,
azureUrl + info.resourceName + '?' + info.sasQueryString,
"",
"image/jpeg",
"updateUploadProgress");
这将启动上传进度(看起来)并且 updateUploadProgress 将触发一次。如果我降低图像质量并只拍一张黑色的照片(可能的最小尺寸),它会达到 100%(否则它会达到更小的百分比),但什么也没有。我注册完成的事件不会触发,我在调试中没有看到任何错误。我的假设是它与 blob 类型有关,或者它使用的是 POST 而不是 PUT。
接下来我尝试使用直接的 XMLHttpRequest。经过一些配置,我可以让它上传画布对象的输出,如下所示:
var canvas = document.createElement("canvas");
var imageObj = document.createElement('img');
imageObj.src = imageUrl;
canvas.width = imageObj.width;
canvas.height = imageObj.height;
var context = canvas.getContext('2d');
context.drawImage(imageObj, 0, 0);
xhr.send(canvas.toDataURL("image/jpeg").split(',')[1]);
那里的问题是它会上传大约正确大小的文件,但它已损坏。此方法在 iPhone 应用程序上也根本不起作用,只是模拟器。我相信使用 XDK 的直接 XMLHttpRequest 调用可能会出现问题。
关于如何将此文件上传到 Azure 的任何建议?