simple HttpURLConnection POST file multipart/form-data from android to google blobstore

前端 未结 4 1782
日久生厌
日久生厌 2020-11-28 05:08

I have very little idea how html works.What i want to do is exactly similar to the following but on android

4条回答
  •  醉酒成梦
    2020-11-28 05:45

    Volley is a good http library for multipart data. AndroidMultiPartEntity class is for progress listener.

        public class AndroidMultiPartEntity extends MultipartEntity
    
        {
    
        private final ProgressListener listener;
    
        public AndroidMultiPartEntity(final ProgressListener listener) {
        super();
        this.listener = listener;
        }
    
        public AndroidMultiPartEntity(final HttpMultipartMode mode, final ProgressListener listener) {
        super(mode);
        this.listener = listener;
        }
    
        public AndroidMultiPartEntity(HttpMultipartMode mode, final String boundary,
        final Charset charset, final ProgressListener listener) {
        super(mode, boundary, charset);
        this.listener = listener;
        }
    
        @Override
        public void writeTo(final OutputStream outstream) throws IOException {
        super.writeTo(new CountingOutputStream(outstream, this.listener));
        }
    
        public static interface ProgressListener {
        void transferred(long num);
        }
    
        public static class CountingOutputStream extends FilterOutputStream {
    
        private final ProgressListener listener;
        private long transferred;
    
        public CountingOutputStream(final OutputStream out,
                                    final ProgressListener listener) {
            super(out);
            this.listener = listener;
            this.transferred = 0;
        }
    
        public void write(byte[] b, int off, int len) throws IOException {
            out.write(b, off, len);
            this.transferred += len;
            this.listener.transferred(this.transferred);
        }
    
        public void write(int b) throws IOException {
            out.write(b);
            this.transferred++;
            this.listener.transferred(this.transferred);
        }
        }
        }
    
        Call the Async task like this
        new UploadFileToServer().execute();
    
    
        The Call method:
        private class UploadFileToServer extends AsyncTask {
        @Override
        protected void onPreExecute() {
    
            super.onPreExecute();
        }
    
        @Override
        protected void onProgressUpdate(Integer... progress) {
    
        }
    
        @Override
        protected String doInBackground(Void... params) {
    
            return uploadFile();
    
        }
    
        private String uploadFile() {
    
            String responseString = null;
    
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(Config.Seeker_Image_Upload);
    
            try {
                AndroidMultiPartEntity entity = new AndroidMultiPartEntity(new AndroidMultiPartEntity.ProgressListener() {
    
                    @Override
                    public void transferred(long num) {
                        publishProgress((int) ((num / (float) totalSize) * 100));
                    }
                });
    
                File sourceFile = new File(Path);
    
                // Adding file data to http body
                entity.addPart("logo", new FileBody(sourceFile));
    
                // Extra parameters if you want to pass to server
                //entity.addPart("website", new StringBody("www.androidhive.info"));
    
                // String emailaddress = UserActivity.emailaddress;
    
                /*preferences = SeekerProfile.this.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
                email_address = preferences.getString("EMAILADDRESS", "");*/
                entity.addPart("EMAILADDRESS", new StringBody(email_address));
                entity.addPart("OPER", new StringBody(Operation_recruiter_logo_upload));
    
                totalSize = entity.getContentLength();
                httppost.setEntity(entity);
    
                // Making server call
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity r_entity = response.getEntity();
    
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == 200) {
                    // Server response
                    responseString = EntityUtils.toString(r_entity);
                } else {
                    responseString = "Error occurred! Http Status Code: " + statusCode;
                }
    
            } catch (ClientProtocolException e) {
                responseString = e.toString();
            } catch (IOException e) {
                responseString = e.toString();
            }
    
            return responseString;
    
            }
    
            @Override
            protected void onPostExecute(String result) {
            //Log.e(TAG, "Response from server: " + result);
            enter code here
            }
    
        }
    

提交回复
热议问题