使用PhoneGap 3.4,Windows Phone 8.我使用的是标准上传代码,其中fullPath是相机以前捕获的文件的完整路径,使用navigator.device.capture.captureImage
以下是上传代码:
var win = function (r) {
alert("Code = " + r.responseCode);
alert("Response = " + JSON.stringify(r.response));
alert("Sent = " + r.bytesSent);
};
var fail = function (error) {
alert("An error has occurred: Code = " + error.code);
alert("upload error source " + error.source);
alert("upload error target " + error.target);
};
var options = new FileUploadOptions();
options.fileKey = "media";
options.fileName = "media";
if (source == "mediaFile"){
options.mimeType = "image/jpeg";
}
else{
options.mimeType = "image/png";
}
var ft = new FileTransfer();
ft.upload(fullPath, serverUrl, win, fail, options, true);
没有任何东西到达服务器。相同的代码在iOS和Android上完美运行。
非常感谢洞察力。
答案 0 :(得分:0)
请尝试以下步骤并分享您的搜索结果以获得进一步的帮助
确保您拥有正确的权限:WP8需要ID_CAP_MEDIALIB_PHOTO功能才能访问媒体库中的照片。功能在应用程序清单文件WMAppManifest.xml中指定。
使用硬编码网址从您的解决方案或IsolatedStorage上传静态文件
我无法预测您的fullPath的样子。你可以调试你的代码共享一个选定图像的样本网址吗?
答案 1 :(得分:0)
我不确定版本3.4,但是我可以通过从FileTransfer
插件中删除第733行来获得版本3.5:
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
这一行导致我的WebAPI服务仅拒绝WP设备上的POSTed文件,因为边界连续两次添加到正文中。
答案 2 :(得分:0)
我发现请求中会发出额外的边界,但遗憾的是,我的请求在表单提交中失败。
FileTransfer提交最终看起来像这样。 (注意额外的边界,包括在参数之后,以及文件数据本身之前。
------------------------------2f2329h7451fc52
Content-Disposition: form-data; name="CaseId"
7e282d21-2a4a-e411-9de6-000c29906b4b
------------------------------2f2329h7451fc52
------------------------------2f2329h7451fc52
Content-Disposition: form-data; name="Files";
filename="///CapturedImagesCache/C__Data_Users_Public_Pictures_Camera Roll_WP_20141029_009_jpg.jpg" {data}
我已按照代码,删除一行来解决此问题。 对我来说,它是FileTransfer.cs的第758行
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
在评论此行后,我的应用程序现在成功上传文件。