Windows phone 7 WP7-PhoneGap文件传输返回空错误代码
我第一次尝试WP7中的PhoneGap/Cordova 2.1.0,所以我是这方面的新手 我应该做的是通过相机拍摄一张照片并上传到服务器 这是我的代码:Windows phone 7 WP7-PhoneGap文件传输返回空错误代码,windows-phone-7,cordova,file-transfer,Windows Phone 7,Cordova,File Transfer,我第一次尝试WP7中的PhoneGap/Cordova 2.1.0,所以我是这方面的新手 我应该做的是通过相机拍摄一张照片并上传到服务器 这是我的代码: <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-sc
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
<title>PhoneGap WP7</title>
<script type="text/javascript" charset="utf-8" src="cordova-2.1.0.js"></script>
<script type="text/javascript">
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() { }
function capturePhoto()
{
// Take picture using device camera and retrieve image
navigator.camera.getPicture(
onPhotoDataSuccess,
onFail,
{
quality: 50,
destinationType: Camera.DestinationType.DATA_URL
}
);
}
function onPhotoDataSuccess(imageData)
{
var options = new FileUploadOptions();
options.fileKey = "file";
options.fileName = imageData.substr(imageData.lastIndexOf('/') + 1);
options.mimeType="image/jpeg";
var params = new Object();
options.params = params;
var ft = new FileTransfer();
ft.upload(imageData, "http://mysite.com/upload.php", win, fail, options);
}
function onFail(message)
{
navigator.notification.alert('Failed because: ' + message);
}
var win = function(r)
{
navigator.notification.alert(r.responseCode + " - " + r.response + " - " + r.bytesSent);
}
var fail = function(error)
{
navigator.notification.alert(eval(error));
}
</script>
</head>
<body>
<h1>PhoneGap Photo Demo</h1>
<button onclick="capturePhoto();">Capture a Photo</button>
</body>
</html>
一些注意事项:
我跟踪了WP7中缺失的白名单
php代码不是我写的,我会在asp.net中完成,如果有人能提供一个asp.net Web服务的工作示例,我将不胜感激
谢谢
编辑
我调试了FileTransfer类,在JsonHelper类中出现错误:
using (MemoryStream mem = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
result = deserializer.ReadObject(mem);
}
错误是:InvalidCastException编辑
试着替换
uploadOptions = JSON.JsonHelper.Deserialize<UploadOptions[]>(options)[0];
uploadOptions=JSON.JsonHelper.Deserialize(选项)[0];
用下面的
options = JSON.JsonHelper.Deserialize<string[]>(options)[0];
uploadOptions = JSON.JsonHelper.Deserialize<UploadOptions>(options);
options=JSON.JsonHelper.Deserialize(选项)[0];
uploadOptions=JSON.JsonHelper.Deserialize(选项);
原始答案
解决此类问题的最简单方法是添加对Cordova库源代码的引用,而不是编译的WP7CordovaClassLib.dll
cordova-2.1.0-incubating-src\cordova-2.1.0\incubator-cordova-wp7\framework\WP7CordovaClassLib.csproj
然后将断点添加到standalone\cordovalib\Commands\FileTransfer.cs
/// <summary>
/// sends a file to a server
/// </summary>
/// <param name="options">Upload options</param>
public void upload(string options)
{
Debug.WriteLine("options = " + options);
options = options.Replace("{}", "null");
//
///将文件发送到服务器
///
///上传选项
公共无效上载(字符串选项)
{
Debug.WriteLine(“options=“+options”);
options=options.Replace(“{}”,“null”);
听起来很复杂,但根据我的经验,逐行调试是理解Apache Cordova在许多情况下出现问题的最简单方法。我按照你的建议,在JsonHelper中反序列化选项时出错。有什么建议吗?我会尽快尝试。目前,我使用Cordova lib版本解决了这个问题1.7.0.我也使用PhoneGap Build创建了Android应用程序,但它不起作用,似乎从未初始化过。你对此有一些IDE吗?非常感谢。
/// <summary>
/// sends a file to a server
/// </summary>
/// <param name="options">Upload options</param>
public void upload(string options)
{
Debug.WriteLine("options = " + options);
options = options.Replace("{}", "null");