protected class UploadFileThread extends java.lang.Thread {
private final java.util.Map<String, String> parameterMap;
private final java.util.Map<String, String> fileMap;
public UploadFileThread(Map<String, String> parameterMap, Map<String, String> fileMap) {
this.parameterMap = parameterMap;
this.fileMap = fileMap;
}
@Override
public void run() {
super.run();
android.util.Log.d("debug", "开始执行url->" + MHttpUrl.UPLOAD_EXCEL);
java.net.HttpURLConnection httpURLConnection = null;
java.io.OutputStream outputStream = null;
java.io.BufferedReader bufferedReader = null;
String BOUNDARY = "------------------------123821742118717";
try {
java.net.URL url = new java.net.URL(MHttpUrl.UPLOAD_EXCEL);
java.net.URLConnection urlConnection = url.openConnection();
httpURLConnection = (java.net.HttpURLConnection) urlConnection;
httpURLConnection.setConnectTimeout(10000);
httpURLConnection.setReadTimeout(600000);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
outputStream = new java.io.DataOutputStream(httpURLConnection.getOutputStream());
if (parameterMap != null) {
java.util.Set<java.util.Map.Entry<String, String>> entrySet = parameterMap.entrySet();
java.util.Iterator<java.util.Map.Entry<String, String>> entryIterator = entrySet.iterator();
java.lang.StringBuilder stringBuilder = new StringBuilder();
while (entryIterator.hasNext()) {
java.util.Map.Entry<String, String> stringStringEntry = entryIterator.next();
String key = stringStringEntry.getKey();
String value = stringStringEntry.getValue();
if (value == null) {
continue;
}
stringBuilder.append("\r\n");
stringBuilder.append("--");
stringBuilder.append(BOUNDARY);
stringBuilder.append("\r\n");
stringBuilder.append("Content-Disposition: form-data; name=\"");
stringBuilder.append(key);
stringBuilder.append("\"\r\n\r\n");
stringBuilder.append(value);
android.util.Log.d("debug", "打印参数http分割信息->" + stringBuilder.toString());
}
outputStream.write(stringBuilder.toString().getBytes());
}
if (fileMap != null) {
java.util.Set<java.util.Map.Entry<String, String>> entrySet = fileMap.entrySet();
java.util.Iterator<java.util.Map.Entry<String, String>> entryIterator = entrySet.iterator();
while (entryIterator.hasNext()) {
java.util.Map.Entry<String, String> stringStringEntry = entryIterator.next();
String key = stringStringEntry.getKey();;
String value = stringStringEntry.getValue();
if (value == null) {
continue;
}
java.io.File file = new java.io.File(value);
String fileName = file.getName();
String contentType = "text/plain";
java.lang.String string = "";
string = string + "\r\n";
string = string + "--";
string = string + BOUNDARY;
string = string + "\r\n";
string = string + "Content-Disposition: form-data; name=\"";
string = string + key;
string = string + "\"; filename=\"";
string = string + fileName;
string = string + "\"\r\n";
string = string + "Content-Type:";
string = string + contentType;
string = string + "\r\n\r\n";
android.util.Log.d("debug", "打印文件http分割信息->" + string);
outputStream.write(string.getBytes());
java.io.DataInputStream dataInputStream = new java.io.DataInputStream(new java.io.FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = dataInputStream.read(bufferOut)) != -1) {
outputStream.write(bufferOut, 0, bytes);
}
dataInputStream.close();
}
}
String endString = "\r\n--" + BOUNDARY + "--\r\n";
byte[] endData = endString.getBytes();
outputStream.write(endData);
outputStream.flush();
outputStream.close();
int responseCode = httpURLConnection.getResponseCode();
if (responseCode == 200) {
java.io.InputStream inputStream = httpURLConnection.getInputStream();
java.io.InputStreamReader inputStreamReader = new java.io.InputStreamReader(inputStream);
bufferedReader = new java.io.BufferedReader(inputStreamReader);
java.lang.StringBuilder stringBuilder = new java.lang.StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
android.util.Log.d("debug", "打印返回的数据->" + stringBuilder.toString());
android.os.Message message = myHandler.obtainMessage();
message.what = 0;
message.obj = stringBuilder.toString();
boolean sendResult = myHandler.sendMessage(message);
} else {
android.os.Message message = myHandler.obtainMessage();
message.what = responseCode;
message.obj = String.valueOf(responseCode);
boolean sendResult = myHandler.sendMessage(message);
}
} catch (java.io.IOException e) {
e.printStackTrace();
android.os.Message message = myHandler.obtainMessage();
message.what = -1;
message.obj = e.getMessage();
boolean sendResult = myHandler.sendMessage(message);
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
if (httpURLConnection != null) {
httpURLConnection.disconnect();
}
}
}
}
jdk原生实现http的文件和参数同时上传
最新推荐文章于 2023-05-05 18:58:28 发布
该代码实现了一个用于上传文件的Java线程UploadFileThread,它使用HTTPURLConnection进行POST请求,支持multipart/form-data格式,处理参数和文件的提交。在上传过程中,对网络连接超时、读取超时进行了设置,并处理了输入输出流,最后根据响应码处理返回数据。
5846

被折叠的 条评论
为什么被折叠?



