- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我让 iphone/ipad 可以正常使用 Titanium.Media.showCamera() 函数。这很棒。
但是,相同的代码无法像我预期的那样在 android 上运行。所以我做了一些研究并在下面提出了这段代码。代码本身可以上传视频。我可以记录,单击保存,但是当需要上传到我的服务器时,我没有收到任何通信错误,并且在服务器本身上,我在 POST 或 FILES 数组中看不到任何数据。下面的代码在 onclick 按钮上执行。我给出了部分代码,因为除此之外一切正常。给了什么?
button2.addEventListener('click', function() {
// http://developer.android.com/reference/android/provider/MediaStore.html
var intent = Titanium.Android.createIntent({ action: 'android.media.action.VIDEO_CAPTURE' });
Titanium.Android.currentActivity.startActivityForResult(intent, function(e) {
if (e.error) {
Ti.UI.createNotification({
duration: Ti.UI.NOTIFICATION_DURATION_LONG,
message: 'Error: ' + e.error
}).show();
} else {
if (e.resultCode === Titanium.Android.RESULT_OK) {
var dataUri = e.intent.data;
Titanium.Media.saveToPhotoGallery(dataUri);
var xhr = Titanium.Network.createHTTPClient({enableKeepAlive:false});
xhr.open('POST', 'http://someserver.com/upload.php');
xhr.setRequestHeader("enctype", "multipart/form-data");
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.onerror = function(e) {
alert(e.error);
};
xhr.onload = function() {
var data = JSON.parse(this.responseText);
if(data.FILE)
alert('File: '+data.FILE);
else
alert(this.responseText);
};
var fileData = Titanium.Filesystem.getFile(dataUri);
var fileContent = fileData.read();
xhr.send({video: fileContent});
} else {
Ti.UI.createNotification({
duration: Ti.UI.NOTIFICATION_DURATION_LONG,
message: 'Canceled/Error? Result code: ' + e.resultCode
}).show();
}
}
});
});
此外,如果您对 php 代码感兴趣,请看这里:
<?php
file_put_contents('output.txt', print_r($_POST, true)."\n".print_r($_FILES, true));
if(empty($_FILES['video']))
die('invalid');
@move_uploaded_file($_FILES['video']['tmp_name'], $_FILES['video']['name']);
echo json_encode(array('FILE' => $_FILES['video']['name']));
最佳答案
好的,明白了。问题是文件是一个 uri,代码不读取文件系统上的 uri。话虽如此,您必须将文件复制到一个新文件,然后使用该新文件上传到服务器。
下面的解决方案对我有用:
button2.addEventListener('click', function() {
// http://developer.android.com/reference/android/provider/MediaStore.html
var intent = Titanium.Android.createIntent({ action: 'android.media.action.VIDEO_CAPTURE' });
Titanium.Android.currentActivity.startActivityForResult(intent, function(e) {
if (e.error) {
Ti.UI.createNotification({
duration: Ti.UI.NOTIFICATION_DURATION_LONG,
message: 'Error: ' + e.error
}).show();
} else {
if (e.resultCode === Titanium.Android.RESULT_OK) {
var dataUri = e.intent.data;
var xhr = Titanium.Network.createHTTPClient({enableKeepAlive:false});
xhr.open('POST', 'http://something.com/video/uploader.php');
xhr.setRequestHeader("enctype", "multipart/form-data");
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.onerror = function(e) {
alert(e.error);
};
xhr.onload = function() {
var data = JSON.parse(this.responseText);
if(data.FILE)
alert('File: '+data.FILE);
else
alert(this.responseText);
};
var source = Ti.Filesystem.getFile(dataUri);
var fileData = Ti.Filesystem.getFile('appdata://sample.3gp');
// note: source.exists() will return false, because this is a URI into the MediaStore.
// BUT we can still call "copy" to save the data to an actual file
source.copy(fileData.nativePath);
Titanium.Media.saveToPhotoGallery(fileData);
if(fileData.exists())
{
var fileContent = fileData.read();
if(fileContent)
xhr.send({video: fileContent});
else
alert('Did not get any data back from file content');
}
else
alert('Did not get a file data for : '+dataUri);
} else {
Ti.UI.createNotification({
duration: Ti.UI.NOTIFICATION_DURATION_LONG,
message: 'Canceled/Error? Result code: ' + e.resultCode
}).show();
}
}
});
});
关于Appcelerator:如何使用 android 上传视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9262556/
当我尝试通过 appc new 命令或 Appcelerator Studio 创建项目时,出现错误。我尝试卸载并重新安装 Appcelerator Studio 几次,但错误没有改变。 appc 输
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
loader_array = []; for (var i=1; i <= 24; i++) { loader_array.push('/images/system/block_loade
我已经开始研究 Appcelerator 1.8.0 几天又回来了,我对 Ti.include 和 require 有点困惑。据我了解, Ti.include 用于将 js 文件的内容包含在另一个文件
我是跨平台 Titanium SDK 和 Alloy MVC 框架的新手。 我在 index.xml 中创建了一个按钮,如下所示: Click Me 但现在我想知道如何在 iPhone
我刚开始使用 appcelerator而且我还没有找到好的布局教程。目前,我尝试显示具有特定位置的 map View 。有人有关于如何执行此操作的示例或好的指示吗? 最佳答案 下载KitchenSin
更新 appcelerator studio(Appcelerator Studio,内部版本:4.4.0.201511241829)后未检测到我的 iPhone 和 iPad。很容易检测到 Andr
我是 appcelerator 的新手。在遵循快速入门指南的同时,我无法在 iOS 模拟器上生成构建,即使在将代码完全复制粘贴到所需模型和 Controller 之后也是如此。 控制台给我以下信息:
我在 appcelerator studio 中收到此错误: openssl config failed: error:02001003:system library:fopen:No such pr
我在 Windows 7 上安装 Appcelerator studio 时遇到问题。尝试创建新的移动项目(Alloy 项目)并在 Android 设备上运行相同的项目时,出现以下错误。在移动网络上运
我没有对应用程序进行任何更改,但从 v8.4 升级到 9.1,然后升级到 9.2 后,该应用程序开始在我的 iOS 设备上正常运行。所以我删除了该应用程序,在appcelerator 5.1.1(支持
我今天似乎无法通过 appcelerator 中的 iOS 模拟器运行任何东西: 工作室构建:4.7.0.201607250649 SDK :5.4.0 (have tried a few diffe
我有一张钛合金 table ,我添加了 3 行。在一种情况下,我从表 table.deleteRow(index) 中删除了第二行,经过一些处理后,我需要在该索引处添加一行。 谁能告诉我如何在特定索引
我正在 appcelerator 中开发一个应用程序 iOS 应用程序,我得到了一张用户表。当我点击用户时,它会打开个人资料,但我也希望用户能够通过点击并按住 2 秒钟来复制名称。 这两个事件单独工作
我正在寻找一个平台来开发跨平台移动应用程序。我们正在开发的应用程序有点复杂,我们需要它在 Android、iOS 和 Blackberry 上运行。 我们希望代码编写一次并在每个平台上运行而没有任何内
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
Appcelerator Studio,版本:4.7.1.201609100950 macOS Sierra 10.12 iMac(视网膜 4K,21.5 英寸,2015 年末) Java 8 Nod
如何在 App 中设置 iPhone 和 Android 的壁纸。 Appcelerator是否有定义的API我在google上搜索但没有找到解决方案。 最佳答案 对于 iPhone,没有任何通过 T
我正在努力在 Titanium 上构建我的第一个 Android 应用程序。我在第一个窗口上加载了 RSS 提要,然后单击 RSS 列表中的链接后,我创建一个新窗口并在该页面上显示 RSS 项目的完整
假设我们想要为 Android 做一个简单的应用程序,并且对于这个应用程序我们需要一些数据。当我在本地电脑上测试我的示例时,这些数据将它们保存在 json 格式的文件中。假设该应用程序不需要互联网连接
我是一名优秀的程序员,十分优秀!