pull/330/head
AriaLyy 8 years ago
parent d05b685fa3
commit 2ec92b75e0
  1. 10
      Aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java
  2. 177
      Aria/src/main/java/com/arialyy/aria/core/upload/UploadUtil.java
  3. 4
      app/src/main/java/com/arialyy/simple/upload.java

@ -12,9 +12,17 @@ public class UploadTaskEntity {
public UploadEntity uploadEntity; public UploadEntity uploadEntity;
public RequestEnum requestEnum = RequestEnum.GET; public RequestEnum requestEnum = RequestEnum.GET;
public String uploadUrl; //上传路径 public String uploadUrl; //上传路径
public String uploadKey; //文件上传需要的key public String attachment; //文件上传需要的key
public String contentType = "multipart/form-data"; //上传的文件类型 public String contentType = "multipart/form-data"; //上传的文件类型
public String charset = "utf-8";
/**
* http 请求头
*/
public Map<String, String> headers = new HashMap<>(); public Map<String, String> headers = new HashMap<>();
/**
* 文件上传表单
*/
public Map<String, String> formFields = new HashMap<>();
public UploadTaskEntity(UploadEntity downloadEntity) { public UploadTaskEntity(UploadEntity downloadEntity) {
this.uploadEntity = downloadEntity; this.uploadEntity = downloadEntity;

@ -2,17 +2,18 @@ package com.arialyy.aria.core.upload;
import android.util.Log; import android.util.Log;
import com.arialyy.aria.util.CheckUtil; import com.arialyy.aria.util.CheckUtil;
import java.io.BufferedInputStream; import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.Map; import java.net.URLConnection;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -22,10 +23,14 @@ import java.util.UUID;
*/ */
public class UploadUtil implements Runnable { public class UploadUtil implements Runnable {
private static final String TAG = "UploadUtil"; private static final String TAG = "UploadUtil";
private final String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
private final String PREFIX = "--", LINE_END = "\r\n";
private UploadEntity mUploadEntity; private UploadEntity mUploadEntity;
private UploadTaskEntity mTaskEntity; private UploadTaskEntity mTaskEntity;
private IUploadListener mListener; private IUploadListener mListener;
private PrintWriter mWriter;
private OutputStream mOutputStream;
private HttpURLConnection mHttpConn;
public UploadUtil(UploadTaskEntity taskEntity, IUploadListener listener) { public UploadUtil(UploadTaskEntity taskEntity, IUploadListener listener) {
mTaskEntity = taskEntity; mTaskEntity = taskEntity;
@ -45,78 +50,122 @@ public class UploadUtil implements Runnable {
mListener.onFail(); mListener.onFail();
return; return;
} }
String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
String PREFIX = "--", LINE_END = "\r\n"; URL url = null;
String CONTENT_TYPE = "multipart/form-data"; // 内容类型
try { try {
HttpURLConnection conn = (HttpURLConnection) new URL(mTaskEntity.uploadUrl).openConnection(); url = new URL(mTaskEntity.uploadUrl);
conn.setReadTimeout(5000); mHttpConn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000); mHttpConn.setUseCaches(false);
conn.setDoInput(true); mHttpConn.setDoOutput(true); // indicates POST method
conn.setDoOutput(true); mHttpConn.setDoInput(true);
conn.setUseCaches(false); mHttpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
conn.setRequestMethod("POST"); mHttpConn.setRequestProperty("User-Agent", "CodeJava Agent");
conn.setRequestProperty("Charset", "utf-8"); // 设置编码
conn.setRequestProperty("connection", "keep-alive");
//conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);
conn.setRequestProperty("Content-Type", mTaskEntity.contentType + ";boundary=" + BOUNDARY);
//添加Http请求头部
Set<String> keys = mTaskEntity.headers.keySet(); Set<String> keys = mTaskEntity.headers.keySet();
for (String key : keys) { for (String key : keys) {
conn.setRequestProperty(key, mTaskEntity.headers.get(key)); mHttpConn.setRequestProperty(key, mTaskEntity.headers.get(key));
}
mOutputStream = mHttpConn.getOutputStream();
mWriter = new PrintWriter(new OutputStreamWriter(mOutputStream, mTaskEntity.charset), true);
//添加文件上传表单字段
keys = mTaskEntity.formFields.keySet();
for (String key : keys) {
addFormField(key, mTaskEntity.formFields.get(key));
}
addFilePart(mTaskEntity.attachment, new File(mUploadEntity.getFilePath()));
Log.d(TAG, finish() + "");
finish();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }
OutputStream outputSteam = conn.getOutputStream(); /**
DataOutputStream dos = new DataOutputStream(outputSteam); * 添加文件上传表单字段
StringBuilder sb = new StringBuilder(); */
sb.append(PREFIX); public void addFormField(String name, String value) {
sb.append(BOUNDARY); mWriter.append(PREFIX).append(BOUNDARY).append(LINE_END);
sb.append(LINE_END); mWriter.append("Content-Disposition: form-data; name=\"")
sb.append("Content-Disposition: form-data; name=\"") .append(name)
.append(mTaskEntity.uploadUrl) .append("\"")
.append(LINE_END);
mWriter.append("Content-Type: text/plain; charset=")
.append(mTaskEntity.charset)
.append(LINE_END);
mWriter.append(LINE_END);
mWriter.append(value).append(LINE_END);
mWriter.flush();
}
/**
* 上传文件
*
* @param fieldName 文件上传attachment
* @throws IOException
*/
public void addFilePart(String fieldName, File uploadFile) throws IOException {
String fileName = uploadFile.getName();
mWriter.append(PREFIX).append(BOUNDARY).append(LINE_END);
mWriter.append("Content-Disposition: form-data; name=\"")
.append(fieldName)
.append("\"; filename=\"") .append("\"; filename=\"")
.append(file.getName()) .append(fileName)
.append("\"") .append("\"")
.append(LINE_END); .append(LINE_END);
sb.append("Content-Type:") mWriter.append("Content-Type: ")
.append(mTaskEntity.contentType) .append(URLConnection.guessContentTypeFromName(fileName))
.append("; charset=utf-8")
.append(LINE_END); .append(LINE_END);
sb.append(LINE_END); mWriter.append("Content-Transfer-Encoding: binary").append(LINE_END);
dos.write(sb.toString().getBytes()); mWriter.append(LINE_END);
mWriter.flush();
InputStream is = new FileInputStream(file);
byte[] bytes = new byte[1024]; FileInputStream inputStream = new FileInputStream(uploadFile);
int len = 0; byte[] buffer = new byte[4096];
while ((len = is.read(bytes)) != -1) { int bytesRead = -1;
dos.write(bytes, 0, len); while ((bytesRead = inputStream.read(buffer)) != -1) {
mOutputStream.write(buffer, 0, bytesRead);
} }
is.close(); mOutputStream.flush();
dos.write(LINE_END.getBytes()); inputStream.close();
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes();
dos.write(end_data); mWriter.append(LINE_END);
dos.flush(); mWriter.flush();
dos.close();
int res = conn.getResponseCode();
if (res == 200) {
BufferedInputStream inputStream = new BufferedInputStream(conn.getInputStream());
byte[] buf = new byte[1024];
StringBuilder stringBuilder = new StringBuilder();
while (inputStream.read(buf) > 0) {
stringBuilder.append(new String(buf, 0, buf.length));
} }
String data = stringBuilder.toString();
Log.d(TAG, data); /**
//L.j(data); * 任务结束操作
//absResponse.onResponse(data); *
} else { * @throws IOException
//absResponse.onError("error"); */
public String finish() throws IOException {
StringBuilder response = new StringBuilder();
mWriter.append(LINE_END).flush();
mWriter.append(PREFIX).append(BOUNDARY).append(PREFIX).append(LINE_END);
mWriter.close();
// checks server's status code first
int status = mHttpConn.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(mHttpConn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
response.append(line);
} }
} catch (MalformedURLException e) { reader.close();
e.printStackTrace(); mHttpConn.disconnect();
} catch (IOException e) { } else {
e.printStackTrace(); throw new IOException("Server returned non-OK status: " + status);
} }
return response.toString();
} }
} }

@ -23,8 +23,8 @@ public class upload extends BaseActivity<ActivityUploadBinding>{
entity.setFilePath("/sdcard/Download/test.pdf"); entity.setFilePath("/sdcard/Download/test.pdf");
entity.setFileName("test.pdf"); entity.setFileName("test.pdf");
UploadTaskEntity taskEntity = new UploadTaskEntity(entity); UploadTaskEntity taskEntity = new UploadTaskEntity(entity);
taskEntity.uploadUrl = "http://172.21.1.160:8080/upload"; taskEntity.uploadUrl = "http://192.168.1.9:8080/upload/sign_file";
taskEntity.uploadKey = "file"; taskEntity.attachment = "file";
UploadUtil util = new UploadUtil(taskEntity, new IUploadListener() { UploadUtil util = new UploadUtil(taskEntity, new IUploadListener() {
@Override public void onFail() { @Override public void onFail() {

Loading…
Cancel
Save