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 发布