package com.basic.security.utils;
|
|
import org.apache.commons.io.FileUtils;
|
|
import java.io.BufferedInputStream;
|
import java.io.BufferedReader;
|
import java.io.DataOutputStream;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.InputStreamReader;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
|
public class MultipartUtilityV2 {
|
private final String boundary = "*****";
|
private final String crlf = "\r\n";
|
private final String twoHyphens = "--";
|
private HttpURLConnection httpConn;
|
private DataOutputStream request;
|
|
/**
|
* This constructor initializes a new HTTP POST request with content type
|
* is set to multipart/form-data
|
*
|
* @param requestURL
|
* @throws IOException
|
*/
|
public MultipartUtilityV2(String requestURL)
|
throws IOException {
|
|
// creates a unique boundary based on time stamp
|
URL url = new URL(requestURL);
|
httpConn = (HttpURLConnection) url.openConnection();
|
httpConn.setUseCaches(false);
|
httpConn.setDoOutput(true); // indicates POST method
|
httpConn.setDoInput(true);
|
|
httpConn.setRequestMethod("POST");
|
httpConn.setRequestProperty("Connection", "Keep-Alive");
|
httpConn.setRequestProperty("Cache-Control", "no-cache");
|
httpConn.setRequestProperty(
|
"Content-Type", "multipart/form-data;boundary=" + this.boundary);
|
|
request = new DataOutputStream(httpConn.getOutputStream());
|
}
|
|
public static void uploadCrashDirectory() {
|
try {
|
File[] crashFiles = new File("/sdcard/crash/").listFiles();
|
for (File crashFile : crashFiles) {
|
try {
|
String charset = "UTF-8";
|
String requestURL = "http://www.aiotlink.com:8080/UploadServlet";
|
|
MultipartUtilityV2 multipart = new MultipartUtilityV2(requestURL);
|
multipart.addFilePart("file", crashFile, crashFile.getName() + "Security_simplify" + System.currentTimeMillis() + ".txt");
|
String response = multipart.finish(); // response from server.
|
System.out.println("MultipartUtilityV2.main" + response);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public static void main(String[] args) {
|
try {
|
String charset = "UTF-8";
|
String requestURL = "http://www.aiotlink.com:8080/UploadServlet";
|
|
MultipartUtilityV2 multipart = new MultipartUtilityV2(requestURL);
|
multipart.addFilePart("file", new File("d:\\c.gif"), new File("d:\\c.gif").getName() + "Security_simplify" + System.currentTimeMillis() + ".txt");
|
String response = multipart.finish(); // response from server.
|
System.out.println("MultipartUtilityV2.main" + response);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
}
|
|
public static void writeAndUpload(String message) {
|
try {
|
File file = new File("/sdcard/crash/Security_simplify" + System.currentTimeMillis() + "txt");
|
FileUtils.write(file, message);
|
uploadCrashDirectory();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* Adds a form field to the request
|
*
|
* @param name field name
|
* @param value field value
|
*/
|
public void addFormField(String name, String value) throws IOException {
|
request.writeBytes(this.twoHyphens + this.boundary + this.crlf);
|
request.writeBytes("Content-Disposition: form-data; name=\"" + name + "\"" + this.crlf);
|
request.writeBytes("Content-Type: text/plain; charset=UTF-8" + this.crlf);
|
request.writeBytes(this.crlf);
|
request.writeBytes(value + this.crlf);
|
request.flush();
|
}
|
|
/**
|
* Adds a upload file section to the request
|
*
|
* @param fieldName name attribute in <input type="file" name="..." />
|
* @param uploadFile a File to be uploaded
|
* @throws IOException
|
*/
|
public void addFilePart(String fieldName, File uploadFile, String fileName)
|
throws IOException {
|
if (fieldName == null || "".equals(fieldName)) {
|
fileName = uploadFile.getName();
|
}
|
request.writeBytes(this.twoHyphens + this.boundary + this.crlf);
|
request.writeBytes("Content-Disposition: form-data; name=\"" +
|
fieldName + "\";filename=\"" +
|
fileName + "\"" + this.crlf);
|
request.writeBytes(this.crlf);
|
byte[] bytes = FileUtils.readFileToByteArray(uploadFile);
|
// byte[] bytes = Files.readAllBytes(uploadFile.toPath());
|
request.write(bytes);
|
}
|
|
/**
|
* 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 String finish() throws IOException {
|
String response = "";
|
|
request.writeBytes(this.crlf);
|
request.writeBytes(this.twoHyphens + this.boundary +
|
this.twoHyphens + this.crlf);
|
|
request.flush();
|
request.close();
|
|
// checks server's status code first
|
int status = httpConn.getResponseCode();
|
if (status == HttpURLConnection.HTTP_OK) {
|
InputStream responseStream = new
|
BufferedInputStream(httpConn.getInputStream());
|
|
BufferedReader responseStreamReader =
|
new BufferedReader(new InputStreamReader(responseStream));
|
|
String line = "";
|
StringBuilder stringBuilder = new StringBuilder();
|
|
while ((line = responseStreamReader.readLine()) != null) {
|
stringBuilder.append(line).append("\n");
|
}
|
responseStreamReader.close();
|
|
response = stringBuilder.toString();
|
httpConn.disconnect();
|
} else {
|
throw new IOException("Server returned non-OK status: " + status);
|
}
|
|
return response;
|
}
|
|
}
|