2

我正在尝试使用 phonegap 发送图像文件filetransfer.upload,但是返回的文件已损坏,并且查看 logcat 发送的文件似乎太短了 200 个字节。

这是我发送文件的代码

sendImageFile = function (imageURI, imageName) {
    writelog("Sending image file", 1);
    var options = new FileUploadOptions();
            options.fileKey="file";
            options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
            options.mimeType="image/jpeg";
            var params = new Object();
            params.value1 = "image name";
            options.params = params;
            options.chunkedMode = false;
            var ft = new FileTransfer();
            writelog("image uri length " + imageURI.length, 1);
    writelog("Image options set up successfully", 1);
    var ft = new FileTransfer();
    ft.upload(imageURI, uploadurl, win, transFail, options);
}

这里有一些来自 logcat 的相关行

01-07 12:27:30.743: D/FileTransfer(20066): Uploaded 114688 of 145432    bytes 

01-07 12:27:31.571: D/FileTransfer(20066): got response from    server 

01-07 12:27:31.696: D/CordovaLog(20066): Code = 200 

01-07 12:27:31.696: D/CordovaLog(20066): Response = 12099

01-07 12:27:31.696: D/CordovaLog(20066): Sent = 145236

任何帮助将不胜感激。

谢谢

马特

4

2 回答 2

2

找到解决方案。我的服务器接受所有作为文件发送的数据,而不是从表单提交中分解它(我相信)。这导致在主图像数据之前有几行文本。

为了解决这个问题,我安装了一个旧的 fileTransfer 插件(https://github.com/phonegap/phonegap-plugins/tree/master/Android/FileUploader),恢复到 phonegap 的 1.8.1 版(因为我不确定如何更新目前较旧的插件)。

编辑 fileUpload.java 文件以删除要发送的文件之前的所有文本。现在它可以被服务器读取

于 2013-01-15T17:00:49.797 回答
1

您不能在 FileTransfer 上传方法中使用从 Android 上的相机成功回调获得的 imageUri,您必须首先将 uri 解析为这样的文件名:

navigator.camera.getPicture(function(imageURI){

    window.resolveLocalFileSystemURI(imageURI, function(fileEntry) {
        fileEntry.file(function(fileObj) {

            var fileName = fileObj.fullPath;

            //now use the fileName in your upload method
            var options = new FileUploadOptions();
            options.fileKey = "file";
            options.fileName = fileName.substr(fileName.lastIndexOf('/')+1);
            //...
        });
    });

}, errorFn, cameraParams);
于 2013-01-08T17:26:58.453 回答