I\'m working on my upload.java servlet to store .jpg to GCS.
I use GCS client library instead of Google Cloud Storage API. But I dont\'t find any sample to upload ph
I finally found (And by myself) the solution to my problem! And I pretty proud of that =D
The code for Android:
//Actions à réaliser en fond
protected String doInBackground(String... params) {
//Création d'une requête HTTP
HttpClient httpClient = new DefaultHttpClient();
//On construit notre adresse Post grâce à ce que l'on vient de récupérer
HttpPost httppost = new HttpPost("http://your_id.appspot.com/upload");
//On créé un fichier File qui contient la photo que l'on vient de prendre (Accessible via son Path)
File f = new File(AccueilActivity.fileUri.getPath());
//Et là on essaie !
try {
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
entityBuilder.addBinaryBody("Photo_a_uploader", f);
entityBuilder.addTextBody("Type", "Type que l'utilisateur a choisi");
httppost.setEntity(entityBuilder.build());
HttpResponse response = httpClient.execute(httppost);
} catch (ClientProtocolException e) {
// Si on tombe dans le catch, on set notre variable à 2.
e.printStackTrace();
} catch (IOException e) {
// Si on tombe dans le catch, on set notre variable à 2.
e.printStackTrace();
}
The code App Engine
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//Read the file contents from the input stream
GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename filename = new GcsFilename(BUCKETNAME, FILENAME);
GcsFileOptions options = new GcsFileOptions.Builder()
.mimeType("image/jpg")
.acl("public-read")
.addUserMetadata("myfield1", "my field value")
.build();
GcsOutputChannel writeChannel = gcsService.createOrReplace(filename, options);
ServletFileUpload upload = new ServletFileUpload();
res.setContentType("text/plain");
try {
FileItemIterator iterator = upload.getItemIterator(req);
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
InputStream stream = item.openStream();
if (item.isFormField()) {
log.warning("Champs texte avec id: " + item.getFieldName()+", et nom: "+Streams.asString(stream));
} else {
log.warning("Nous avons un fichier à uploader : " + item.getFieldName() +
", appelé = " + item.getName());
// You now have the filename (item.getName() and the
// contents (which you can read from stream). Here we just
// print them back out to the servlet output stream, but you
// will probably want to do something more interesting (for
// example, wrap them in a Blob and commit them to the
// datastore).
// Open a channel to write to it
byte[] bytes = ByteStreams.toByteArray(stream);
try {
writeChannel.write(ByteBuffer.wrap(bytes));
} finally {
writeChannel.close();
stream.close();
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
I hope these sample help you with app engine and google cloud storage !