国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java 通過 HttpURLConnection 上傳文件

Tychio / 3484人閱讀

摘要:直接用的上傳文件,通過模擬提交方法具體代碼如下網絡訪問工具默認默認或執行調用地址方法地址請求的與實體對應的信息如執行調用地址方法地址秒連接分鐘讀數據上傳文件表單參數文件參數上傳文件允許同一個屬性上傳多個文件表單參數文件參數調

直接用jdk的HttpURLConnection上傳文件,通過模擬post提交方法

具體代碼如下:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

/**
 * http 網絡訪問工具
 *
 * @author wonderful.
 * @version 3.0.0
 */
public class HttpClient {

    private final static Logger LOGGER = Logger.getLogger(HttpClient.class);
    private String method = null;
    private String CONTENT_TYPE = null; //默認
    
    /**
     * 默認POST
     *
     * @return String
     */
    public String getMethod() {
        if (method == null) {
            return "POST";
        }
        return method;
    }

    /**
     *  POST 或 GET 
     *
     * @param method .
     */
    public void setMethod(String method) {
        this.method = method;
    }
    
    /**
     * 執行調用 serviceURL地址 方法
     * @param serviceURL webService地址.
     * @param param String.
     * @param ContentType 請求的與實體對應的MIME信息   如:Content-Type: application/x-www-form-urlencoded,application/json,application/xml  
     * @return String.
     */
    public String pub(String serviceURL, String param,String contentType) {
        CONTENT_TYPE = contentType;
        return pub(serviceURL,param);
    }
    /**
     * 執行調用 serviceURL地址 方法
     * @param serviceURL webService地址.
     * @param param String.
     * @return String.
     */
    public String pub(String serviceURL, String param) {
        URL url = null;
        HttpURLConnection connection = null;
        StringBuffer buffer = new StringBuffer();
        LOGGER.info("request:" + serviceURL + "?" + param);
        try {
            url = new URL(serviceURL);
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setRequestMethod(getMethod());
            connection.setConnectTimeout(5000);//30秒連接
            connection.setReadTimeout(5*60*1000);//5分鐘讀數據
            connection.setRequestProperty("Content-Length", param.length() + "");
            if(CONTENT_TYPE != null){
                connection.setRequestProperty("Content-Type", CONTENT_TYPE);
            }           
            
            OutputStream outputStream = connection.getOutputStream();
            outputStream.write(param.getBytes("UTF-8"));

            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            reader.close();
        } catch (IOException e) {
            LOGGER.error(e);
        } finally {

            if (connection != null) {
                connection.disconnect();
            }
        }

        LOGGER.info("response:" + buffer.toString());
        return buffer.toString();
    }

    /**
     * 上傳文件
     * 
     * @param serviceURL
     * @param textMap
     *            表單參數
     * @param fileMap
     *            文件參數
     * @return
     * @throws IOException
     */
    public static String formUpload(String serviceURL, Map textMap, Map fileMap) throws IOException {
        Map> tempMap = new HashMap<>();
        if (!Objects.isNull(fileMap) && !fileMap.isEmpty()) {
            Iterator> iter = fileMap.entrySet().iterator();
            while (iter.hasNext()) {
                Map.Entry entry = iter.next();
                String inputName = entry.getKey();
                String inputValue = entry.getValue();
                if (StringUtils.isAnyBlank(inputName, inputValue)) {
                    continue;
                }
                LinkedHashSet values = new LinkedHashSet<>();
                values.add(inputValue);
                tempMap.put(inputName, values);
            }
        }
        return formUploadMulti(serviceURL, textMap, tempMap);
    }

    /**
     * 上傳文件,允許同一個屬性上傳多個文件
     * 
     * @param serviceURL
     * @param textMap
     *            表單參數
     * @param fileMap
     *            文件參數
     * @return
     * @throws IOException
     */
    public static String formUploadMulti(String serviceURL, Map textMap, Map> fileMap) throws IOException {
        LOGGER.trace(String.format("調用文件上傳,傳入參數:serviceURL=%s,textMap=%s,fileMap=%s", serviceURL, textMap, fileMap));
        String res = "";
        HttpURLConnection conn = null;
        OutputStream out = null;
        BufferedReader reader = null;
        String BOUNDARY = "---------------------------" + System.currentTimeMillis(); // boundary就是request頭和上傳文件內容的分隔符
        try {
            URL url = new URL(serviceURL);
            conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);// 30秒連接
            conn.setReadTimeout(5 * 60 * 1000);// 5分鐘讀數據
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

            out = new DataOutputStream(conn.getOutputStream());
            // text
            if (!Objects.isNull(textMap) && !textMap.isEmpty()) {
                StringBuffer strBuf = new StringBuffer();
                Iterator> iter = textMap.entrySet().iterator();
                while (iter.hasNext()) {
                    Map.Entry entry = iter.next();
                    String inputName = entry.getKey();
                    String inputValue = entry.getValue();
                    if (StringUtils.isAnyBlank(inputName, inputValue)) {
                        continue;
                    }
                    strBuf.append("
").append("--").append(BOUNDARY).append("
");
                    strBuf.append("Content-Disposition: form-data; name="" + inputName + ""

");
                    strBuf.append(inputValue);
                }
                out.write(strBuf.toString().getBytes());
            }

            // file
            if (!Objects.isNull(fileMap) && !fileMap.isEmpty()) {
                Iterator>> iter = fileMap.entrySet().iterator();
                while (iter.hasNext()) {
                    Entry> entry = iter.next();
                    String inputName = entry.getKey();
                    LinkedHashSet inputValue = entry.getValue();
                    if (StringUtils.isAnyBlank(inputName) || inputValue.isEmpty()) {
                        continue;
                    }
                    for (String filePath : inputValue) {
                        File file = new File(filePath);
                        String filename = file.getName();
                        Path path = Paths.get(filePath);
                        String contentType = Files.probeContentType(path);
                        StringBuffer strBuf = new StringBuffer();
                        strBuf.append("
").append("--").append(BOUNDARY).append("
");
                        strBuf.append("Content-Disposition: form-data; name="" + inputName + ""; filename="" + filename + ""
");
                        strBuf.append("Content-Type:" + contentType + "

");
                        LOGGER.trace(String.format("filename:%s,contentType:%s", filename, contentType));
                        out.write(strBuf.toString().getBytes());

                        DataInputStream in = new DataInputStream(new FileInputStream(file));
                        int bytes = 0;
                        byte[] bufferOut = new byte[1024];
                        while ((bytes = in.read(bufferOut)) != -1) {
                            out.write(bufferOut, 0, bytes);
                        }
                        in.close();
                    }
                }
            }

            byte[] endData = ("
--" + BOUNDARY + "--
").getBytes();
            out.write(endData);
            out.flush();

            // 讀取返回數據
            LOGGER.trace(String.format("http 返回狀態:ResponseCode=%s,ResponseMessage=%s", conn.getResponseCode(), conn.getResponseMessage()));
            StringBuffer strBuf = new StringBuffer();
            reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null) {
                strBuf.append(line).append("
");
            }
            res = strBuf.toString();
            LOGGER.trace(String.format("http 返回數據:%s", res));
            reader.close();
            reader = null;
        } catch (IOException e) {
            throw e;
        } finally {
            if (!Objects.isNull(out)) {
                out.close();
                out = null;
            }
            if (!Objects.isNull(reader)) {
                reader.close();
                reader = null;
            }
            if (conn != null) {
                conn.disconnect();
                conn = null;
            }
        }
        return res;
    }
}

上面的兩個方法有待優化,未處理

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75753.html

相關文章

  • 使用java進行http通信

    摘要:請求用于注冊登錄等安全性較高且向數據庫中寫入數據的操作。該類中定義了一系列的狀態碼設置該連接是可以輸出的設置請求方式向連接中輸出數據相當于發送數據給服務器讀取數據使用進行通信大大簡化了中通信的實現。 Http通信概述 Http通信主要有兩種方式POST方式和GET方式。前者通過Http消息實體發送數據給服務器,安全性高,數據傳輸大小沒有限制,后者通過URL的查詢字符串傳遞給服務器參數...

    blastz 評論0 收藏0
  • 怎么用Java從網上下載一個視頻下來

    摘要:用的流從網上下載一個視頻原理就是用對象與目標地址建立一個鏈接,用流的方式從這個鏈接上把視頻的二進制數據讀取下載然后再寫入本地文件。然后循環依次寫入緩存的大小,直至結束。 用Java的IO流從網上下載一個視頻 原理:就是用URL對象與目標地址建立一個鏈接,用IO流的方式從這個鏈接上把視頻的二進制數據讀取下載然后再寫入本地文件。 因為小弟比較菜的緣故,不會下載那些加了密的視頻鏈接,這里我就...

    warmcheng 評論0 收藏0
  • 慕課網_《Java實現SSO單點登錄》學習總結

    摘要:時間年月日星期三說明本文部分內容均來自慕課網。慕課網教學示例源碼無個人學習源碼第一章概述課程介紹及介紹課程目標認識并理解及其應用,并能根據其實現原理自行實現。 時間:2017年3月22日星期三說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-...

    flyer_dev 評論0 收藏0

發表評論

0條評論

Tychio

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<