in Education by
i have this problem that i want to upload image on a server through multi-part form but its keep giving me invalid image when i try to upload it from android but work fine from web. this is html form which work fine. http://letitripple.org/htmlForm.html this is the request this html form create. (i get from chrome developer tool) ------WebKitFormBoundaryPug6xAUAlaUPbR86 Content-Disposition: form-data; name="wp-user-avatars"; filename="Desert.jpg" Content-Type: image/jpeg ------WebKitFormBoundaryPug6xAUAlaUPbR86 Content-Disposition: form-data; name="login_id" 51 ------WebKitFormBoundaryPug6xAUAlaUPbR86 Content-Disposition: form-data; name="cookie" [email protected]|1473394633|vcN3CTbKi6pkAjPMKH1D9MHucPLKhw3wyeS7ViSTgGb|f5cbd913f6c3d6940066a660bac5908adb016682ce34f48e8200773eb4503c1e ------WebKitFormBoundaryPug6xAUAlaUPbR86 Content-Disposition: form-data; name="submit" submit ------WebKitFormBoundaryPug6xAUAlaUPbR86-- This is my android code which is not working. public AppResponse uploadImageFile(String csURL, String csFilePath) { AppResponse appResponse = null; HttpURLConnection conn = null; DataOutputStream dos = null; ByteArrayOutputStream output = null; InputStream inStream = null; String Url = csURL; String existingFileName = csFilePath; String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "WebKitFormBoundaryleA9RIQsQBxW8Cgl"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; // String reponse_data = null; int maxBufferSize = 1 * 1024 * 1024; // String urlString = "YOUR PHP LINK FOR UPLOADING IMAGE"; try { //------------------ CLIENT REQUEST // FileInputStream fileInputStream = new FileInputStream(new File(existingFileName) ); // open a URL connection to the Servlet URL url = new URL(Url); // Open a HTTP connection to the URL conn = (HttpURLConnection) url.openConnection(); // Allow Inputs conn.setDoInput(true); // Allow Outputs conn.setDoOutput(true); // Don't use a cached copy. conn.setUseCaches(false); FileInputStream fileInputStream = new FileInputStream(new File(existingFileName));//You can get an inputStream using any IO API byte[] bytes; byte[] buffers = new byte[605244]; int bytesReads; output = new ByteArrayOutputStream(); // Use a post method. conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + twoHyphens + twoHyphens + boundary); //conn.setRequestProperty("attach1", existingFileName); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + twoHyphens + twoHyphens + boundary + "\r\n"); dos.writeBytes("Content-Disposition: form-data; name=\"attach1\"; filename=\"profile.jpg\"\n Content-Type: image/jpg\r\n\r\n\r\n"); // uploaded_file_name is the Name of the File to be uploaded // create a buffer of maximum size bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // read file and write it into form... bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { dos.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); Log.e("Value", "Writing"); } // send multipart form data necesssary after file data... dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + twoHyphens + twoHyphens + boundary + twoHyphens); //String strInput = dos.toString(); int responseCode = conn.getResponseCode(); String serverResponseMessage = conn.getResponseMessage(); fileInputStream.close(); dos.flush(); dos.close(); int nResponseCode = conn.getResponseCode(); inStream = new DataInputStream(conn.getInputStream()); BufferedReader in = new BufferedReader(new InputStreamReader(inStream)); String line = ""; StringBuilder csResult = new StringBuilder(""); while ((line = in.readLine()) != null) { Log.e("Debug", "Server Response " + csResult); csResult.append(line); } appResponse = new AppResponse(nResponseCode, csResult.toString()); } catch (IOException ioe) { Log.e("Debug", "error: " + ioe.getMessage(), ioe); } return appResponse; } JavaScript questions and answers, JavaScript questions pdf, JavaScript question bank, JavaScript questions and answers pdf, mcq on JavaScript pdf, JavaScript questions and solutions, JavaScript mcq Test , Interview JavaScript questions, JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)

1 Answer

0 votes
by
We build the utility class called MultipartUtility with the following code: import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; /** * This utility class provides an abstraction layer for sending multipart HTTP * POST requests to a web server. * @author www.codejava.net * */ public class MultipartUtility { private final String boundary; private static final String LINE_FEED = "\r\n"; private HttpURLConnection httpConn; private String charset; private OutputStream outputStream; private PrintWriter writer; /** * This constructor initializes a new HTTP POST request with content type * is set to multipart/form-data * @param requestURL * @param charset * @throws IOException */ public MultipartUtility(String requestURL, String charset) throws IOException { this.charset = charset; // creates a unique boundary based on time stamp boundary = "===" + System.currentTimeMillis() + "==="; URL url = new URL(requestURL); httpConn = (HttpURLConnection) url.openConnection(); httpConn.setUseCaches(false); httpConn.setDoOutput(true); // indicates POST method httpConn.setDoInput(true); httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); httpConn.setRequestProperty("User-Agent", "CodeJava Agent"); httpConn.setRequestProperty("Test", "Bonjour"); outputStream = httpConn.getOutputStream(); writer = new PrintWriter(new OutputStreamWriter(outputStream, charset), true); } /** * Adds a form field to the request * @param name field name * @param value field value */ public void addFormField(String name, String value) { writer.append("--" + boundary).append(LINE_FEED); writer.append("Content-Disposition: form-data; name=\"" + name + "\"") .append(LINE_FEED); writer.append("Content-Type: text/plain; charset=" + charset).append( LINE_FEED); writer.append(LINE_FEED); writer.append(value).append(LINE_FEED); writer.flush(); } /** * Adds a upload file section to the request * @param fieldName name attribute in * @param uploadFile a File to be uploaded * @throws IOException */ public void addFilePart(String fieldName, File uploadFile) throws IOException { String fileName = uploadFile.getName(); writer.append("--" + boundary).append(LINE_FEED); writer.append( "Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + fileName + "\"") .append(LINE_FEED); writer.append( "Content-Type: " + URLConnection.guessContentTypeFromName(fileName)) .append(LINE_FEED); writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED); writer.append(LINE_FEED); writer.flush(); FileInputStream inputStream = new FileInputStream(uploadFile); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } outputStream.flush(); inputStream.close(); writer.append(LINE_FEED); writer.flush(); } /** * Adds a header field to the request. * @param name - name of the header field * @param value - value of the header field */ public void addHeaderField(String name, String value) { writer.append(name + ": " + value).append(LINE_FEED); writer.flush(); } /** * Completes the request and receives response from the server. * @return a list of Strings as response in case the server returned * status OK, otherwise an exception is thrown. * @throws IOException */ public List finish() throws IOException { List response = new ArrayList(); writer.append(LINE_FEED).flush(); writer.append("--" + boundary + "--").append(LINE_FEED); writer.close(); // checks server's status code first int status = httpConn.getResponseCode(); if (status == HttpURLConnection.HTTP_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader( httpConn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { response.add(line); } reader.close(); httpConn.disconnect(); } else { throw new IOException("Server returned non-OK status: " + status); } return response; } } This utility class uses java.net.HttpURLConnection class and follows the RFC 1867 (Form-based File Upload in HTML) to make an HTTP POST request with multipart/form-data content type in order to upload files to a given URL. It has one constructor and three methods: MultipartUtility(String requestURL, String charset): creates a new instance of this class for a given request URL and charset. void addFormField(String name, String value): adds a regular text field to the request. void addHeaderField(String name, String value): adds an HTTP header field to the request. void addFilePart(String fieldName, File uploadFile): attach a file to be uploaded to the request. List finish(): this method must be invoked lastly to complete the request and receive response from server as a list of String. Since the MultipartUtility class abstracts all the detailed implementation, a usage example would be pretty simple as shown in the following program: import java.io.File; import java.io.IOException; import java.util.List; /** * This program demonstrates a usage of the MultipartUtility class. * @author www.codejava.net * */ public class MultipartFileUploader { public static void main(String[] args) { String charset = "UTF-8"; File uploadFile1 = new File("e:/Test/PIC1.JPG"); File uploadFile2 = new File("e:/Test/PIC2.JPG"); String requestURL = "http://localhost:8080/FileUploadSpringMVC/uploadFile.do"; try { MultipartUtility multipart = new MultipartUtility(requestURL, charset); multipart.addHeaderField("User-Agent", "CodeJava"); multipart.addHeaderField("Test-Header", "Header-Value"); multipart.addFormField("description", "Cool Pictures"); multipart.addFormField("keywords", "Java,upload,Spring"); multipart.addFilePart("fileUpload", uploadFile1); multipart.addFilePart("fileUpload", uploadFile2); List response = multipart.finish(); System.out.println("SERVER REPLIED:"); for (String line : response) { System.out.println(line); } } catch (IOException ex) { System.err.println(ex); } } }

Related questions

0 votes
    i have this problem that i want to upload image on a server through multi-part form but its keep ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jul 8, 2022 in Education by JackTerrance
0 votes
    I want making multi-bluetooth from Android studio. I found multi-bluetooth java code libraries. but I am ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jul 3, 2022 in Education by JackTerrance
0 votes
    How to remove a image in imageview in android and also how to hide the entire image. Here I have ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Feb 27, 2022 in Education by JackTerrance
0 votes
    I'm developing an Android app and I'm working on photo uploading to my rails server. If I upload ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Mar 2, 2022 in Education by JackTerrance
0 votes
    Animation example link: https://drive.google.com/open?id=1M5UBylFj0_8mtOEQT7jjsPN9DcCjyfPI I want to show my app ... for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Apr 26, 2022 in Education by JackTerrance
0 votes
    I am trying to build a mailto: uri to send a mail using the GMail app. I would like to use the ... , JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Feb 13, 2022 in Education by JackTerrance
0 votes
    I'm looking at making an custom Android object Serializable. Should be simple I just cannot find a easy ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Aug 1, 2022 in Education by JackTerrance
0 votes
    I've made a fresh eclipse reinstall + Android SDK v4.0. I am trying to create a new 4.0 AVD ... , JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jul 30, 2022 in Education by JackTerrance
0 votes
    I'm trying to execute the following command: arp -a and I would like to redirect the output to a ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jul 26, 2022 in Education by JackTerrance
0 votes
    I've noticed on Marshmallow (e.g. Nexus 6P) and also on some more recently updated Lollipop phones ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jul 20, 2022 in Education by JackTerrance
0 votes
    I'm trying to execute the following command: arp -a and I would like to redirect the output to a ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jul 20, 2022 in Education by JackTerrance
0 votes
    i want to run a task every 5 minutes. i've tried to solve it with an IntentService and ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jun 26, 2022 in Education by JackTerrance
0 votes
    I am creating an application for Android. I am using Realm as a Database. Realm working fine in the ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jun 14, 2022 in Education by JackTerrance
0 votes
    I want to put a settings icon to the right of a full-width button which when clicked opens an ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked May 4, 2022 in Education by JackTerrance
0 votes
    I just updated to Android Studio 3.4 (Canary 5). Then I opened my existing project (which worked ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Apr 19, 2022 in Education by JackTerrance
...