4

我正在尝试使用 PhoneGap 在 iPhone 上录制音频,然后将该音频发送到服务器。我使用 PhoneGap 媒体 API 进行录制,然后使用 PhoneGap 文件传输 API 将文件发送到服务器。

我能够很好地进行录音,并且播放效果很好。但是,当我尝试将其发送到服务器时,记录显示在服务器上,但它说文件是 0k 大。

我已经对这个问题进行了相当广泛的搜索,并发现了其他有这个问题的人。例如:https ://groups.google.com/forum/#!topic/phonegap/zjzSs6JVokE

   function win(r) {
        alert("Code = " + r.responseCode);
        alert("Response = " + r.response);
        alert("Sent = " + r.bytesSent);
    }

    function fail(error) {
        alert("An error has occurred: Code = " + error.code);
        console.log("upload error source " + error.source);
        console.log("upload error target " + error.target);
    }

    function upLoad() {
        var options = new FileUploadOptions();
        options.fileKey="file";
        options.fileName=myPath.substr(myPath.lastIndexOf('/')+1);
        options.mimeType="audio/wav";

        var params = new Object();

        var headers={'headerParam':'headerValue'};

        options.headers = headers;

        options.chunkedMode = false;

        var ft = new FileTransfer();
        ft.upload(encodeURI(myPath),  encodeURI("http://myserver.com/upload.php"), win, fail, options);

    }

这是服务器端的代码:

print_r($_FILES);
$new_image_name = "testFile.wav";
move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/wwwroot/recordings/".$new_image_name);

我认为这可能是我发送 .wav 文件的问题。当我发送文件时, r.bytesSent 通常显示大约 200 到 400 个字节(无论文件大小),所以看起来文件的实际内容没有被发送过来。

我已经用一个简单的文本文件测试了上面的代码,它运行得很好,所以我认为这不是权限或语法问题。我没有用图像文件尝试过这个,但我无法想象它对我发送的内容有很大的影响。

有没有人成功做到这一点?

4

1 回答 1

1

几天前我设法解决了这个问题。这是关于问题示例中的 myPath 变量。myPath 不能是 tmp 文件夹(临时文件夹 phonegap/device 创建)以外的任何内容。因此,当您尝试发送文件时,您肯定知道在 tmp 文件夹中制作了该文件的副本。所以在 ft.upload 之前这样做:

myPath = myPath.replace(myFolderPath, 'tmp');

在我的例子中,myFolderPath 是“Documents\media”。文档路径是自定义创建的文件保存在您的设备上的位置。

我希望这可以从所有访问过的谷歌搜索页面中拯救人们:
)(这适用于 phonegap 3.0.0)

于 2013-10-25T09:42:17.887 回答