我正在使用带有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的一个问题,但请求永远不会发送它在发送之前就失败了。我对上述代码的错误有什么想法吗?
答案 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);
}