@WorkerThread
private String postImage(String urlStr, String formDataKey, String formData, String fileKey, String fileContentType, File file) {
String dash = "--";
String boundary = generateBoundary();
String newLine = "\r\n";
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
FileInputStream inputStream = null;
try {
URL url = new URL(urlStr);
connection = (HttpURLConnection) url.openConnection();
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);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
outputStream = new DataOutputStream(connection.getOutputStream());
// form data
String knowledgeRequest = dash + boundary + newLine +
"Content-Disposition: form-data; name=\"" + formDataKey + "\"" + newLine +
"Content-Type: text/plain; charset=utf-8" + newLine +
newLine +// important !
formData + newLine +
dash + boundary + newLine;
outputStream.writeBytes(knowledgeRequest);
// file data
String fileHeader = "Content-Disposition: form-data; name=\"" + fileKey + "\"; filename=\"" + file.getName() + "\"" + newLine +
"Content-Type:" + fileContentType + newLine +
"Content-Transfer-Encoding: binary" + newLine +
newLine;// important !
outputStream.writeBytes(fileHeader);
byte[] buffer = new byte[1024];
int count;
inputStream = new FileInputStream(file);
while (true) {
count = inputStream.read(buffer);
if (count == -1) {
break;
}
outputStream.write(buffer, 0, count);
}
outputStream.writeBytes(newLine);// important !
outputStream.writeBytes(dash + boundary + dash + newLine);
outputStream.flush();
int statusCode = connection.getResponseCode();
StringBuilder response = new StringBuilder();
if (statusCode == 200) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
return response.toString();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (connection != null) {
connection.disconnect();
}
if (outputStream != null) {
outputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
private String generateBoundary() {
return "--------------------------" +
UUID.randomUUID().toString().replace("-", "");
}
网友评论