将音频文件从Phonegap上传到Clypit

时间:2014-08-23 18:44:38

标签: ios cordova file-upload file-transfer

我正在使用带有Phonegap的FileTransfer对象。我正在尝试根据他们的API http://clyp.it/api将文件上传到Clypit,该API表示您可以将表单上传中的文件上传到此网址http://upload.clyp.it/upload。我已经在普通的网络浏览器中对此进行了测试,但它确实有效。

但是,它与IOS设备略有不同,因为当您使用文件选择输入表单时,它们只允许访问图片库。我需要上传录制的音频片段。

所以我使用了以下代码:

 function shareRecording(rec){
    window.shareFile = rec;
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, shareFileSystemSuccess, fail);
}

function shareFileSystemSuccess(fs){
    fs.root.getFile(window.shareFile, {create: false}, gotShareFileSuccess, fail);
}

function gotShareFileSuccess(fileEntry){
    uploadToClypit(fileEntry);
}

function uploadToClypit(file){
    console.log(file);

      var options = new FileUploadOptions();
      options.name= file.fullPath.substr(file.fullPath.lastIndexOf('/')+ 1);
      console.log(options);

    var ft = new FileTransfer();
    console.log(file.nativeURL);
    ft.upload(file.nativeURL, encodeURI("http://upload.clyp.it/upload"), win, failUpload);

}

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

var failUpload = function(error){
    console.log(error);
}

我的理解是FileTransfer()对象创建了一个HTTP多部分POST请求,因此这应该模仿带有表单的普通Web浏览器中发生的事情。但我收到一个fileTransferError.CONNECTION_ERR我试过用Safari WEb Inspector调试这个,很遗憾我看不到网络发送的请求。我原以为它可能是Clypit的一个问题,但请求永远不会发送它在发送之前就失败了。我对上述代码的错误有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我想通了 - 首先,我没有将选项作为参数传递给ft.upload,其次我没有设置Clypit所需的写入参数。

所以它现在看起来像这样:

function uploadToClypit(file){
console.log(file);

var options = new FileUploadOptions();
options.name = file.fullPath.substr(file.fullPath.lastIndexOf('/')+ 1);
options.audioFile = file.nativeURL;
options.fileName = file.nativeURL;
options.mimeType = "audio/wav";
options.headers = {
    Connection: "close"
}
options.chunkedMode = false;
console.log(options);

var ft = new FileTransfer();
console.log(file.nativeURL);
ft.upload(file.nativeURL, encodeURI("http://upload.clyp.it/upload"), win, failUpload, options);

}