0

我正在尝试找出一种使用 Icenium+Cordova (mobile) 和 ASP.NET 将图像从手机上传到远程服务器的方法。

我确实尝试在提供远程 Web 服务地址时使用FileTransfer()命令,但没有成功。我正在使用 Icenium 模拟器和 Visual Studio 在本地测试代码。

我需要的是移动(Javascript)和服务器(.NET)端的代码示例,以支持该图像上传通信。谢谢。

我目前使用的代码:

function uploadPhoto(imageURI) { 
    var options = new FileUploadOptions(); 
    options.fileKey="image_file"; // recFile
    var imagefilename = Number(new Date())+".png"; 
    options.fileName=imagefilename; 
    options.mimeType=  "text/plain"; 
    options.chunkedMode = false;

    params = {
        val1: "some value",
        val2: "some other value"
    };
    options.params = params;


    var ft = new FileTransfer(); 

    ft.upload(imageURI,"http://127.0.0.1:1691/ImageWebService.asmx/SaveImage", success, fail, options); 

}

在服务器端:

 [WebMethod]
    [ScriptMethod]
    public string SaveImage()
    {
        try
        {
            HttpPostedFile file = HttpContext.Current.Request.Files[0];
            if (file == null)
                return "0";

            HttpPostedFile file =
            HttpContext.Current.Request.Files[0];
            string targetFilePath = "c:\\" + file.FileName;
            file.SaveAs(targetFilePath);
        }
        catch (Exception ex)
        {
        }

        return "1";

    }

我也有:

<access origin="*" />

在科尔多瓦的 config.xml 中。

注意:我使用“Advanced Rest Client”使用标准文件上传控件测试了用于图像上传的 web 服务,它返回 200 OK。

除此之外,我被卡住了,可以找到一种方法将图像成功上传到远程服务器。我愿意使用其他方法,但我认为如果我想要最好的可比性,使用本机 Cordova FileTransfer() 是更安全的方法。

4

2 回答 2

1

我想您正在尝试使用 cordova 版本 3 进行编译。据我了解,在 cordova-3 中,大多数设备级 API 已移至外部插件:阅读 http://cordova.apache中的“访问功能” .org/docs/en/3.0.0/cordova_file_file.md.html#File

所以在Icenium它不再起作用了。如果您尝试进入项目属性并设置cordova 2.7.0 ,一切都会正常工作。

为了确保在您的主 javascript 中添加这一行,在 deviceready 事件中:

alert("deviceReady!");
alert(device.platform);

如果您同时收到警报消息,则该应用程序正常工作,并且文件传输也将正常工作。

但是如果你在 Icenium 中导入 File-Transfer GitHub 项目,仍然使用 cordova-3,它会正常工作。这真是一个谜,只有 Telerik 可以向我们解释他们在做什么!

乔马可

于 2013-10-13T11:49:21.980 回答
1

您应该使用机器名称,并且您的设备应该连接到同一网络。您的设备无法知道 127.0.0.1 是什么,因为它是一个环回地址。始终通过尝试从另一台机器的浏览器访问它们来测试您的服务。Cordova 版本与它无关,Icenium 即使现在也提供所有设备 API,无需手动将它们作为单独的插件包含。

于 2013-10-14T12:36:49.997 回答