gpt4 book ai didi

android - 使用文件传输上传大于 15mb 的视频时 Phonegap 崩溃

转载 作者:搜寻专家 更新时间:2023-11-01 08:11:52 24 4
gpt4 key购买 nike

在 Android、Samsung Galaxy S、phonegap 版本:1.3.0 上测试

我正在为社区构建一个基于用户的视频 uploader 。

所有使用小于 15 mb(大约)的文件的尝试都非常有效,无论是从库中选择文件还是录制视频,然后上传。

我在两台不同的服务器上试过这个,php ini 设置很好高于要求。我试过 chunkedMode = false;

问题仍然存在,如果视频大于 15,phonegap 会崩溃姆。所有 15 MB 以下的文件都非常好。

Phonegap 甚至不返回错误,它只是崩溃。我试过放入 try catch 语句但没有成功。

这是我的代码(非常基本的测试目的):

<!DOCTYPE html>
<html>
<head>
<title>Video Uploader</title>
<meta name="viewport" content="width=device-width, initial-
scale=1">
<link rel="stylesheet" href="master.css" type="text/css" />
<script type="text/javascript" charset="utf-8"
src="phonegap-1.3.0.js"></script>
<script type="text/javascript" charset="utf-8">
function onLoad() {
document.addEventListener("deviceready",onDeviceReady,false);
}
function onDeviceReady() {
pictureSource=navigator.camera.PictureSourceType;
destinationType=navigator.camera.DestinationType;
}
function uploadFile(mediaFile,method) {
var ft = new FileTransfer(),
path = mediaFile,
name = "video.3gp";
var options = new FileUploadOptions();
options.chunkedMode = false;
options.fileKey = "file";
options.fileName = name;
options.mimeType = "video/mpeg";
ft.upload(path,
"http://www.myserver.com/upload.php",
function(r) {
alert('Success ' + r.response);
},
function(error) {
alert('Error ' + path + ': ' + error.code);
},
options);
}
function onPhotoURISuccess(imageURI) {
uploadFile(imageURI,"library");
}
function getVideo(source, type) {
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality:
50, destinationType: destinationType.FILE_URI, sourceType: source,
mediaType: type});
}
function onFail(message) {
alert('Error');
}
</script>
</head>
<body onload="onLoad()">
<button class="btn"
onclick="getVideo(pictureSource.PHOTOLIBRARY,Camera.MediaType.VIDEO);">Get
Video</button>
</body>
</html>

如有任何建议,我们将不胜感激!

谢谢!

最佳答案

你需要设置

options.chunkedMode=true;

当分块模式为 false 时,Android 上的 HTTP 代码会尝试在发送之前在内存中缓冲整个传输。对于您的情况下更大的传输 15 mb,但对于其他手机,它会更少,因为它们的内存更少,这将导致抛出 OutOfMemory 异常。由于永远不应捕获 OOME,因此应用程序将崩溃。

如果您将分块模式设置为 true,那么 Android 上的 HTTP 代码会尝试使用流模式将信息发送到服务器。并非所有服务器都支持流式传输模式,但大多数都支持。

至于为什么它在 40+ mb 时失败,我有点不知所措,除非你的 php.ini 文件指定这是它将接受的最大文件大小。

关于android - 使用文件传输上传大于 15mb 的视频时 Phonegap 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8940058/

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