Sencha Touch 2 を使用してモバイル Web アプリを作成しています。アプリから Amazon S3 にファイルをアップロードし、S3 からファイルの URL を取得する必要があります。
PHP 部分はほぼ完成しています。ユーザーがボタンをクリックし、ファイル ダイアログを開いて、ファイルを選択し、PHP ファイルを呼び出してファイルを S3 にアップロードできるようにするには、どのように sencha プログラムを実装すればよいでしょうか?
どんなアイデアや提案も大歓迎です!!!
Sencha Touch 2 を使用してモバイル Web アプリを作成しています。アプリから Amazon S3 にファイルをアップロードし、S3 からファイルの URL を取得する必要があります。
PHP 部分はほぼ完成しています。ユーザーがボタンをクリックし、ファイル ダイアログを開いて、ファイルを選択し、PHP ファイルを呼び出してファイルを S3 にアップロードできるようにするには、どのように sencha プログラムを実装すればよいでしょうか?
どんなアイデアや提案も大歓迎です!!!
2日経ってようやく判明!
はい、Sencha を使用して Android ファイル システムにアクセスし、ファイルをアップロードすることはできません。
Sencha のカメラ機能を使うのはやめて、phonegap のカメラとファイル転送機能を使い、ファイルシステムにアクセスしてから S3 にアップロードしました。
console.log("camera should be called!");
navigator.camera.getPicture(uploadPhoto,
function(message) { alert('get picture failed'); },
{ quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY }
);
function uploadPhoto(imageURI) {
console.log(imageURI);
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";
var params = new Object();
params.value1 = "test";
params.value2 = "param";
options.params = params;
var ft = new FileTransfer();
ft.upload(imageURI, "http://54.251.39.219/index.php", win, fail, options);
}
function win(r) {
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
}
function fail(error) {
alert("An error has occurred: Code = " = error.code);
}
サーバー側の PHP ファイル:
<?php
include('image_check.php');
$msg='';
if($_SERVER['REQUEST_METHOD'] == "POST")
{
echo '<b>S3 File URL:</b>';
$name = $_FILES['file']['name'];
$name = $name . '.jpg';
$size = $_FILES['file']['size'];
$tmp = $_FILES['file']['tmp_name'];
$ext = getExtension($name);
if(strlen($name) > 0)
{
echo "strlen ok";
echo "filename is ".$name;
echo "extension is ".$ext;
if(in_array($ext,$valid_formats))
{
if($size<(1024*1024))
{
include('s3_config.php');
//Rename image name.
$actual_image_name = time().".".$ext;
if($s3->putObjectFile($tmp, $bucket , $actual_image_name,
S3::ACL_PUBLIC_READ) )
{
$msg = "S3 Upload Successful.";
echo 'upload successful!';
$s3file='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name;
echo "<img src='$s3file' style='max-width:400px'/><br/>";
echo '<b>S3 File URL:</b>'.$s3file;
}
else
echo "S3 Upload Fail.";
}
else
echo "Image size Max 1 MB";
}
else
echo "Invalid file, please upload image file.";
}
else
echo "Please select image file";
}
?>
なお、アップロードしたファイルは拡張子がないので、拡張子を付ける必要があります。