2012-11-03 8 views
1

Je construis une application web mobile en utilisant Sencha Touch 2, et j'ai besoin de télécharger le fichier de l'application sur Amazon S3, et obtenir l'URL du fichier de S3.Télécharger le fichier sur Amazon S3

La partie PHP est presque terminée, comment dois-je implémenter mon programme sencha pour permettre à l'utilisateur de cliquer sur un bouton, ouvrir la boîte de dialogue, sélectionner le fichier et appeler le fichier PHP pour télécharger le fichier sur S3?

Toute idée ou suggestion est la bienvenue !!!

+0

Vous ne pouvez pas accéder au système de fichiers à partir d'une application Sencha Touch, vous devez utiliser un wrapper natif comme PhoneGap. –

+0

Bonjour TDeBailleul, merci pour vos informations, je l'ai finalement compris, et mis ma solution en réponse :) – zhoubo

Répondre

0

Enfin compris après deux jours!

Oui, il est impossible d'utiliser Sencha pour accéder au système de fichiers Android et télécharger des fichiers. J'ai abandonné l'utilisation de la fonction caméra de Sencha et utilisé la fonction de caméra et de transfert de fichiers de phonegap, j'accède au système de fichiers, puis je télécharge en 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); 
     } 

Le fichier PHP côté serveur:

<?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"; 

} 

?> 

Remarque, le fichier téléchargé est sans extension, donc je dois lui donner une extension ... Pour la configuration S3, s'il vous plaît se référer à le site officiel S3 pour des choses comme secretkey ...

Questions connexes