jdk原生实现http的文件和参数同时上传

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();
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值