Photo don't uploaded correctly GCS App Engine

前端 未结 1 802
青春惊慌失措
青春惊慌失措 2020-12-21 06:59

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

相关标签:
1条回答
  • 2020-12-21 07:19

    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 !

    0 讨论(0)
提交回复
热议问题