gpt4 book ai didi

javascript - PhoneGap 尝试上传音频媒体文件 - iOS 正常,Android 找不到文件

转载 作者:行者123 更新时间:2023-11-28 02:37:26 25 4
gpt4 key购买 nike

  • 我们有一个可以录制音频的应用,它使用 PhoneGap Media API,在 iOS 中则使用 File API。
  • 当用户单击“接受并上传”按钮时,应用会利用 PhoneGap 的 File.FileTransfer() 方法将该文件移动到服务器。
  • 在 iOS 上运行良好,在 Android 上则不太好。
  • 当我将 Android 设备连接到计算机并安装为驱动器时,我可以看到该文件正在根目录下创建,而该位置正是它应该所在的位置。
  • 创建音频文件后,我可以从全局变量 fullRecordPath 中存储的位置在我的设备上播放该文件,其中 = recording.wav
  • 当我尝试将 File.FileTransfer() 指向该路径时,我收到错误代码 = 1,我知道这是找不到文件

处理接受并上传点击事件的代码:

$('#btnAcceptUpload').live('tap',function () {

if(isIOS){
thisFileToUpload = fullRecordPath;
} else {
// thisFileToUpload = './'+fullRecordPath; //doesn't work
// thisFileToUpload = 'file:///'+fullRecordPath; //doesn't work
thisFileToUpload = fullRecordPath; //doesn't work
}

var options = new FileUploadOptions();

msg = '';
options.fileKey="file";

msg += "options.fileKey = "+options.fileKey+"\n";
options.fileName=thisFileToUpload.substr(thisFileToUpload.lastIndexOf('/')+1);

msg += "options.fileName = "+options.fileName+"\n";
options.mimeType='audio/wav';

options.chunkedMode = false;

msg += "options.mimeType = "+options.mimeType+"\n";
msg += "thisFileToUpload = "+thisFileToUpload;

alert(msg);

var ft = new FileTransfer();
ft.upload(thisFileToUpload, "http://10.0.17.121/~email/ttmovefiles.php", fileUploadSuccess, fileUploadFailure, options);
});

成功回调:

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

失败回调:

function fileUploadFailure(error){
alert("An error has occurred: Code = " + error.code);
}

感谢您的浏览。

最佳答案

好吧好吧。我想出了这个。我保证稍后我会回来解决这个问题,但想将其记录下来,这样我就可以结束帮助另一个人。

  • 在 iOS 中,要创建新媒体,您别无选择,必须使用 File api。文件系统中的这个完全合格的位置被移动到同一个全局变量中,Media.play() 方法在 iOS 中可以很好地发挥作用。
  • 不知道为什么它会这样工作,但是对于 Android,Media.play() 不喜欢传入它的完全限定路径。它只需要文件名,并且显然是从根目录搜索的。
  • File.FileTransfer.upload() 始终需要上传资源的完全限定路径,无论 iOS 还是 Android。

要实现此目的:

我使用文件 API 创建了音频媒体随后用于将录音移入的文件。我设置了 2 个全局变量:一个用于在设备 fullRecordPath 上播放音频,另一个用于上传 fullUploadPath

下面是创建文件、调用媒体 API 并设置 Android 所需的全局变量的函数:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){

fileSystem.root.getFile(recordFileName, {
create: true,
exclusive: false
}, function(fileEntry){
alert("---------> Android File " + recordFileName + " created at " + fileEntry.fullPath);
fullRecordPath = recordFileName;
fullUploadPath = fileEntry.fullPath;
mediaVar = new Media(recordFileName, function(){
alert("Android media created successfully");
}, androidMediaCreateFailure, mediaStatusCallback); //of new Media
onMediaCreated();
}, androidMediaCreateFailure); //of getFile
}, androidMediaCreateFailure); //of requestFileSystem

这是播放该媒体的代码

function playAudio() {
var my_media = new Media(fullRecordPath,

// success callback
function () {
console.log("playAudio():Audio Success");
},

// error callback
function (err) {
console.log("playAudio():Audio Error: " + err.code);
exposeObject(err);
});

my_media.play();
}

这是要上传的代码

$('#btnAcceptUpload').live('tap',function () {

if(isIOS){
thisfullUploadPath = fullRecordPath;
} else {
thisfullUploadPath = fullUploadPath;
}

var options = new FileUploadOptions();

msg = '';
options.fileKey="file";

msg += "options.fileKey = "+options.fileKey+"\n";
options.fileName=thisfullUploadPath.substr(thisfullUploadPath.lastIndexOf('/')+1);

msg += "options.fileName = "+options.fileName+"\n";
options.mimeType='audio/wav';

options.chunkedMode = false;

msg += "options.mimeType = "+options.mimeType+"\n";
msg += "thisfullUploadPath = "+thisfullUploadPath;

alert(msg);

var ft = new FileTransfer();
ft.upload(thisfullUploadPath, "http://10.0.17.121/~email/ttmovefiles.php", fileUploadSuccess, fileUploadFailure, options);
});

关于javascript - PhoneGap 尝试上传音频媒体文件 - iOS 正常,Android 找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com