package com.basic.security.utils; import com.basic.security.base.BaseApplication; 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; public MultipartUtilityV2(String requestURL) throws IOException { URL url = new URL(requestURL); httpConn = (HttpURLConnection) url.openConnection(); httpConn.setUseCaches(false); httpConn.setDoOutput(true); 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() { BaseApplication.getApplication().executorService.execute(()->{ 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() + RUtils.applicationID + System.currentTimeMillis() + ".txt"); String response = multipart.finish(); System.out.println("MultipartUtilityV2.main" + response); } catch (Exception e) { ExceptionUtil.printException(e); } } } catch (Exception e) { ExceptionUtil.printException(e); } }); } 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(); System.out.println("MultipartUtilityV2.main" + response); } catch (Exception e) { ExceptionUtil.printException(e); } } 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) { ExceptionUtil.printException(e); } } 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(); } 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); request.write(bytes); } public void addFilePart(String fieldName, File uploadFile) throws IOException { String fileName = ""; 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); request.write(bytes); } 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(); int status = httpConn.getResponseCode(); if (status == HttpURLConnection.HTTP_OK || 1 == 1) { 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; } }