-
-
Save ZengruiWang/23bc7acd2c8478d574fc to your computer and use it in GitHub Desktop.
multipart request using httpurlconnection
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public String multipartRequest(String urlTo, String post, String filepath, String filefield) throws ParseException, IOException { | |
HttpURLConnection connection = null; | |
DataOutputStream outputStream = null; | |
InputStream inputStream = null; | |
String twoHyphens = "--"; | |
String boundary = "*****"+Long.toString(System.currentTimeMillis())+"*****"; | |
String lineEnd = "\r\n"; | |
String result = ""; | |
int bytesRead, bytesAvailable, bufferSize; | |
byte[] buffer; | |
int maxBufferSize = 1*1024*1024; | |
String[] q = filepath.split("/"); | |
int idx = q.length - 1; | |
try { | |
File file = new File(filepath); | |
FileInputStream fileInputStream = new FileInputStream(file); | |
URL url = new URL(urlTo); | |
connection = (HttpURLConnection) url.openConnection(); | |
connection.setDoInput(true); | |
connection.setDoOutput(true); | |
connection.setUseCaches(false); | |
connection.setRequestMethod("POST"); | |
connection.setRequestProperty("Connection", "Keep-Alive"); | |
connection.setRequestProperty("User-Agent", "Android Multipart HTTP Client 1.0"); | |
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary); | |
outputStream = new DataOutputStream(connection.getOutputStream()); | |
outputStream.writeBytes(twoHyphens + boundary + lineEnd); | |
outputStream.writeBytes("Content-Disposition: form-data; name=\"" + filefield + "\"; filename=\"" + q[idx] +"\"" + lineEnd); | |
outputStream.writeBytes("Content-Type: image/jpeg" + lineEnd); | |
outputStream.writeBytes("Content-Transfer-Encoding: binary" + lineEnd); | |
outputStream.writeBytes(lineEnd); | |
bytesAvailable = fileInputStream.available(); | |
bufferSize = Math.min(bytesAvailable, maxBufferSize); | |
buffer = new byte[bufferSize]; | |
bytesRead = fileInputStream.read(buffer, 0, bufferSize); | |
while(bytesRead > 0) { | |
outputStream.write(buffer, 0, bufferSize); | |
bytesAvailable = fileInputStream.available(); | |
bufferSize = Math.min(bytesAvailable, maxBufferSize); | |
bytesRead = fileInputStream.read(buffer, 0, bufferSize); | |
} | |
outputStream.writeBytes(lineEnd); | |
// Upload POST Data | |
String[] posts = post.split("&"); | |
int max = posts.length; | |
for(int i=0; i<max;i++) { | |
outputStream.writeBytes(twoHyphens + boundary + lineEnd); | |
String[] kv = posts[i].split("="); | |
outputStream.writeBytes("Content-Disposition: form-data; name=\"" + kv[0] + "\"" + lineEnd); | |
outputStream.writeBytes("Content-Type: text/plain"+lineEnd); | |
outputStream.writeBytes(lineEnd); | |
outputStream.writeBytes(kv[1]); | |
outputStream.writeBytes(lineEnd); | |
} | |
outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); | |
inputStream = connection.getInputStream(); | |
result = this.convertStreamToString(inputStream); | |
fileInputStream.close(); | |
inputStream.close(); | |
outputStream.flush(); | |
outputStream.close(); | |
return result; | |
} catch(Exception e) { | |
Log.e("MultipartRequest","Multipart Form Upload Error"); | |
e.printStackTrace(); | |
return "error"; | |
} | |
} | |
private String convertStreamToString(InputStream is) { | |
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); | |
StringBuilder sb = new StringBuilder(); | |
String line = null; | |
try { | |
while ((line = reader.readLine()) != null) { | |
sb.append(line); | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} finally { | |
try { | |
is.close(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
return sb.toString(); | |
} | |
// see http://www.androidsnippets.com/multipart-http-requests |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment