2011-09-14 6 views
3

J'ai du mal à trouver des exemples montrant comment utiliser Java pour permettre aux utilisateurs de télécharger une image sur Amazon S3.Téléchargement d'images Java stockées dans Amazon S3

Le flux est:

  1. L'utilisateur est sur le formulaire HTML avec un élément de forme d'entrée de fichier.

  2. Ce formulaire soumet l'image sélectionnée à une servlet.

  3. Cette servlet traite l'image et la stocke dans S3.

Quelqu'un sait-il de bons liens/tutoriels qui donnent un exemple de code pour effectuer cela?

Répondre

8

Pour le 3ème point:

  • Grab jets3t
  • C'est tutoriel est simple. Voici un extrait que je utilise:

    S3Object fileObject = new S3Object(path); 
    fileObject.setDataInputStream(is); 
    s3service.putObject(bucketName, fileObject); 
    

Pour les deux points précédents - look at this question

+0

Merci! J'ai fait quelques progrès et je suis au point où j'essaie de mettre l'objet en S3. La documentation dit "Si vos données ne sont pas un fichier ou une chaîne, vous pouvez utiliser n'importe quel flux d'entrée en tant que source de données, mais vous devez définir manuellement la longueur du contenu." J'attrape l'image téléchargée en tant que InputStream. Je ne suis pas sûr comment extraire le Content-Length pour le définir ici: s3FileObject.setContentLength (contentLength); Je l'ai essayé de convertir le InputStream en chaîne, pour ensuite saisir la lenth de contenu, mais l'image téléchargée résultant est endommagé. Des pensées sur comment je peux attraper le contenu-lenth? – Stamford

+0

à clarifier les choses, il ne fait travailler sans réglage de la longueur de contenu, me donne juste un avertissement. Donc, mieux compris à comprendre comment le spécifier: WARN [org.jets3t.service.impl.rest.httpclient.RestStorageService: 1610] Content-Length du flux de données non défini, détermine automatiquement la longueur des données en mémoire – Stamford

+0

'Integer.parseInt (request.getHeader ("Content-Length") 'devrait vous donner – Bozho

1

vous recommandons d'utiliser html amazon API pour ce faire. Le streaming est un peu complexe et dans la plupart des cas vous n'en avez pas besoin.

-1

Vous pouvez également utiliser un formulaire simple pour télécharger le fichier dans le compartiment S3. Regardez cet exemple http://aws.amazon.com/articles/1434

forme Exemple:

<html> 
    <head> 
    <title>S3 POST Form</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    </head> 

    <body> 
    <form action="https://s3-bucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data"> 
     <input type="hidden" name="key" value="uploads/${filename}"> 
     <input type="hidden" name="AWSAccessKeyId" value="YOUR_AWS_ACCESS_KEY"> 
     <input type="hidden" name="acl" value="private"> 
     <input type="hidden" name="success_action_redirect" value="http://localhost/"> 
     <input type="hidden" name="policy" value="YOUR_POLICY_DOCUMENT_BASE64_ENCODED"> 
     <input type="hidden" name="signature" value="YOUR_CALCULATED_SIGNATURE"> 
     <input type="hidden" name="Content-Type" value="image/jpeg"> 
     <!-- Include any additional input fields here --> 

     File to upload to S3: 
     <input name="file" type="file"> 
     <br> 
     <input type="submit" value="Upload File to S3"> 
    </form> 
    </body> 
</html>