我正在尝试使用 Phonegap 将文件上传到我的服务器。当出现以下错误时,我目前陷入困境:

InvalidCastException 
Failed to deserialize WP7CordovaClassLib.Cordova.Commands.FileTransfer+UploadOptions[] with JSON value :: ["{\"filePath\":\"/CapturedImagesCache/PhotoChooser-51766419-c657-46db-a53d-f09bee300a89.jpg\",\"server\":\"http://server.myapp.srv.co.nz/pages/fileupload\",\"fileKey\":\"file\",\"fileName\":\"PhotoChooser-51766419-c657-46db-a53d-f09bee300a89.jpg\",\"mimeType\":\"image/jpg\",\"params\":\"value1=test&value2=param\",\"chunkedMode\":false}"] 

HTML + Javascript

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <meta name="format-detection" content="telephone=no" /> 
    <title>File Transfer Example</title> 
 
</head> 
<body> 
    <button id="uploadPhotoButton">Upload a Photo</button> 
 
    <script type="text/javascript" src="cordova-2.2.0.js"></script> 
    <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script> 
    <script type="text/javascript" src="js/jquery.mobile-1.2.0.min.js"></script> 
    <script type="text/javascript" src="js/camera.js"></script> 
    <script type="text/javascript"> 
 
    $(document).one("pause", function () { 
        console.log('Paused.'); 
    }); 
 
    $(document).one("resume", function () { 
        console.log('Resumed.'); 
    }); 
 
    $(document).one("deviceready", function () { 
        console.log('Device is ready.'); 
    }); 
 
    $(document).one("backbutton", function () { 
        console.log('Back button pressed.'); 
    }); 
 
    $(document).ready(function () { 
        console.log('DOM is ready.'); 
 
        $(document).on("click", "#uploadPhotoButton", function (e) { 
            console.log('clicked button'); 
            getImage(); 
        }); 
 
 
        function getImage() { 
            // Retrieve image file location from specified source 
                navigator.camera.getPicture(uploadPhoto, function (message) { 
                    alert('get picture failed'); 
                }, { 
                    quality: 50, 
                    destinationType: navigator.camera.DestinationType.FILE_URI, 
                    sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY 
                } 
            ); 
 
        } 
 
        function uploadPhoto(imageURI) { 
            var options = new FileUploadOptions(); 
            options.fileKey = "file"; 
            options.fileName = imageURI.substr(imageURI.lastIndexOf('/') + 1); 
            options.mimeType = "image/jpeg"; 
 
            var params = new Object(); 
            params.value1 = "test"; 
            params.value2 = "param"; 
 
            options.params = params; 
            options.chunkedMode = false; 
 
            var ft = new FileTransfer(); 
            ft.upload(imageURI, "http://my.server.co.nz/pages/fileupload", win, fail, options); 
        } 
 
        function win(r) { 
            console.log("Code = " + r.responseCode); 
            console.log("Response = " + r.response); 
            console.log("Sent = " + r.bytesSent); 
            alert(r.response); 
        } 
 
        function fail(error) { 
            alert("An error has occurred: Code = " = error.code); 
        } 
    }); 
 
    </script> 
    </body> 
</html> 

完整的错误日志。

GapBrowser_Navigated :: /app/www/index.html#/app/www/uploadtest.html 
Log:"clicked button" 
The thread '<No Name>' (0xf55026a) has exited with code 0 (0x0). 
The thread '<No Name>' (0xe3f0326) has exited with code 0 (0x0). 
INFO: AppDeactivated 
INFO: AppActivated 
Log:"Paused." 
The thread '<No Name>' (0xf1a02e6) has exited with code 0 (0x0). 
Log:"Resumed." 
The thread '<No Name>' (0xf2a01d2) has exited with code 0 (0x0). 
options = ["{\"filePath\":\"/CapturedImagesCache/PhotoChooser-51766419-c657-46db-a53d-f09bee300a89.jpg\",\"server\":\"http://my.server.co.nz/pages/fileupload\",\"fileKey\":\"file\",\"fileName\":\"PhotoChooser-51766419-c657-46db-a53d-f09bee300a89.jpg\",\"mimeType\":\"image/jpg\",\"params\":\"value1=test&value2=param\",\"chunkedMode\":false}"] 
A first chance exception of type 'System.InvalidCastException' occurred in System.ServiceModel.Web.dll 
A first chance exception of type 'System.InvalidCastException' occurred in System.ServiceModel.Web.dll 
InvalidCastException 
Failed to deserialize WP7CordovaClassLib.Cordova.Commands.FileTransfer+UploadOptions[] with JSON value :: ["{\"filePath\":\"/CapturedImagesCache/PhotoChooser-51766419-c657-46db-a53d-f09bee300a89.jpg\",\"server\":\"http://server.myapp.srv.co.nz/pages/fileupload\",\"fileKey\":\"file\",\"fileName\":\"PhotoChooser-51766419-c657-46db-a53d-f09bee300a89.jpg\",\"mimeType\":\"image/jpg\",\"params\":\"value1=test&value2=param\",\"chunkedMode\":false}"] 
A first chance exception of type 'System.NullReferenceException' occurred in Lion.MyApp.dll 
The thread '<No Name>' (0xfdc025e) has exited with code 0 (0x0). 
Log:"Error in error callback: FileTransfer1325332352 = ReferenceError: Invalid left-hand side in assignment" 
The thread '<No Name>' (0xfa60286) has exited with code 0 (0x0). 

有没有人知道如何让它发挥作用?

谢谢!

W

请您参考如下方法:

我认为您正在扭曲您的期权值(value)。您需要传递 JSON 还是实际对象?

现在您正在传递一个包含文本的数组。

options = ["{\"filePath\":\"/CapturedImagesCache/PhotoChooser-51766419-c657-46db-a53d-f09bee300a89.jpg\",\"server\":\"http://my.server.co.nz/pages/fileupload\",\"fileKey\":\"file\",\"fileName\":\"PhotoChooser-51766419-c657-46db-a53d-f09bee300a89.jpg\",\"mimeType\":\"image/jpg\",\"params\":\"value1=test&value2=param\",\"chunkedMode\":false}"] 

错误似乎涉及反序列化问题。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!