public static String uploadFile(String urlStr, String formName, String filePath) {
long start = System.currentTimeMillis();
File file = new File(filePath);
if (!file.exists() || !file.canRead()) {
throw new IllegalArgumentException("file not exists");
}
String baseResult = null;
try {
final String newLine = "\r\n";
final String boundaryPrefix = "--";
String BOUNDARY = "========" + System.currentTimeMillis();
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = conn.getOutputStream();
StringBuilder sb = new StringBuilder();
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(newLine);
sb.append("Content-Disposition: form-data;name=\"").append(formName).append("\";filename=\"").append(file.getName()).append("\"").append(newLine);
sb.append("Content-Type:application/octet-stream");
sb.append(newLine);
sb.append(newLine);
out.write(sb.toString().getBytes());
DataInputStream in = new DataInputStream(new FileInputStream(file));
byte[] bufferOut = new byte[4 * 1024];
int bytes = 0;
final int uploadAvailable = in.available();
int curUploadSize = 0;
StringBuilder prgBar = new StringBuilder();
long duration = System.currentTimeMillis();
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
curUploadSize += bytes;
Thread.sleep(0);
if ((System.currentTimeMillis() - duration) >= 100) {
prgBar.append("=");
String percent = String.format("%.2f", ((curUploadSize * 100.0f) / (uploadAvailable * 100.0f)) * 100);
String tail = "=>[" + percent + "]";
System.out.println(prgBar.toString() + tail);
duration = System.currentTimeMillis();
}
}
System.out.println(prgBar.toString() + "==>[" + 100 + "]");
System.out.println("send tcp packet data..");
out.write(newLine.getBytes());
in.close();
byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine).getBytes();
out.write(end_data);
out.flush();
out.close();
StringBuilder builder = new StringBuilder();
builder.append(conn.getResponseCode())
.append(" ")
.append(conn.getResponseMessage())
.append("\n");
Map<String, List<String>> map = conn.getHeaderFields();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
if (entry.getKey() == null)
continue;
builder.append(entry.getKey())
.append(": ");
List<String> headerValues = entry.getValue();
Iterator<String> it = headerValues.iterator();
if (it.hasNext()) {
builder.append(it.next());
while (it.hasNext()) {
builder.append(", ")
.append(it.next());
}
}
builder.append("\n");
}
System.out.println(builder);
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
StringBuilder retStr = new StringBuilder("");
while ((line = reader.readLine()) != null) {
retStr.append(line);
}
baseResult = retStr.toString();
conn.disconnect();
} catch (Exception e) {
baseResult = e.getMessage();
} finally {
System.out.println("const_time: " + (System.currentTimeMillis() - start));
}
return baseResult;
}
String uploadFile = uploadFile(" https://m.vxiao.cn/ss", "file", "/Users/system/Downloads/com.zqzn.entranceguard_69_v2.1.2.apk");
System.out.println(uploadFile);