我得到iPhone/iPad的Titanium.Media.showCamera()函數正常工作。這很棒。Appcelerator:如何使用android上傳視頻?
但是,相同的代碼不能像我所期望的那樣在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文件複製到現有的文件。我會在當天晚些時候爲其他具有相同問題的人發佈解決方案。 – user1207047 2012-02-13 17:04:41