<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        HTTPclient使用MultipartEntity怎么上傳文件_html/css_WEB-ITnose

        來源:懂視網 責編:小采 時間:2020-11-27 15:54:21
        文檔

        HTTPclient使用MultipartEntity怎么上傳文件_html/css_WEB-ITnose

        HTTPclient使用MultipartEntity怎么上傳文件_html/css_WEB-ITnose:jsp HTTPclient MultipartEntity multipart/form-data jsp 頁面上傳文件代碼: httpclient 不知道怎么寫, 網上查了一大堆都是你抄我我抄你的, 網上都是這么寫的 jsp 代碼是下面這樣的 后天代碼都是這樣寫的 MultipartEn
        推薦度:
        導讀HTTPclient使用MultipartEntity怎么上傳文件_html/css_WEB-ITnose:jsp HTTPclient MultipartEntity multipart/form-data jsp 頁面上傳文件代碼: httpclient 不知道怎么寫, 網上查了一大堆都是你抄我我抄你的, 網上都是這么寫的 jsp 代碼是下面這樣的 后天代碼都是這樣寫的 MultipartEn

        jsp HTTPclient MultipartEntity multipart/form-data

        jsp 頁面上傳文件代碼:


        httpclient 不知道怎么寫,
        網上查了一大堆都是你抄我我抄你的,
        網上都是這么寫的
        jsp 代碼是下面這樣的


        后天代碼都是這樣寫的

        MultipartEntity entity = new MultipartEntity();
        entity.addPart("param1", new StringBody("中國", Charset.forName("UTF-8")));
        entity.addPart("param2", new StringBody("value2", Charset.forName("UTF-8")));
        entity.addPart("param3", new FileBody( new File("C:\\1.txt")));

        HttpPost request = new HttpPost(“http://localhost/index.html”);
        request.setEntity(entity);

        我就不懂了,上面的路徑都是文件上傳選的,他們寫代碼都是
        entity.addPart("param3", new FileBody( new File("C:\\1.txt")));
        文件路徑都是寫死的,文件上傳貌似是沒有這個new File()的吧!因為代碼在服務器端,怎么可能會這么寫呢?
        用戶上傳自己本地的代碼是本地的路徑,服務器邊這邊肯定是沒這個地址的,

        我都不知道上面這些代碼他們自己都不去驗證就往上寫

        求高手們幫幫忙,這個問題怎么解決,
        服務器端的接口要的就是multipart/form-data這個數據,我該怎么寫



        回復討論(解決方案)

        你先搞清楚 HTTPclient 是做什么用的
        HTTPclient 的作用是在 jsp 中模擬一個瀏覽器,即 HTTP 協議的客戶端(client)
        你的后臺代碼是將你本地服務器上的文件 像瀏覽器那樣上傳到目標服務器
        于是 new File("C:\\1.txt") 的問題就可以解決了吧?C:\\1.txt 是你本地服務器中的文件,當然文件名是你自己定的

        至于 multipart/form-data 聲明,那是由 HttpPost 的參數 MultipartEntity 自動加上的

        我要的就是網頁上傳到服務器,服務器使用HTTPclient 調用另一個服務接口上傳,并不是上傳我本地文件

        因為這個接口規定了只能傳multipart/form-data,瀏覽器那邊會把上傳的文件信息通過這邊后臺獲取后再轉向接口那邊去執行保存,接口那邊存放操作各自數據等

        我的頁面是這樣的,這個窗口有上傳功能,進行提交,提交到后臺,后臺再使用httpclient轉向另一個接口服務器,需要把這些數據傳過去,接口那邊要的是multipart/form-data 這個文件流,我現在不知道怎么使用httpclient傳過去,因為我以前沒用功HTTPclient

        上傳功能窗口

        上傳請求到后臺的數據


        這就是傳給后臺的數據,現在是想要httpclient獲取multipart/form-data,不知道怎么做

        Request URL:http://localhost:8080/proxy/api/images/attachments/json/0/67/0/0/-1?Type=Image&CKEditor=textEditor&CKEditorFuncNum=1&langCode=zh-cn
        Request Headers CAUTION: Provisional headers are shown.
        Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
        Content-Type:multipart/form-data; boundary=----WebKitFormBoundarysw8ttG9a1gakIbQt
        Origin:http://localhost:8080
        Referer:http://localhost:8080/user/kouht/editonline
        User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
        Query String Parametersview sourceview URL encoded
        Type:Image
        CKEditor:textEditor
        CKEditorFuncNum:1
        langCode:zh-cn
        Request Payload
        ------WebKitFormBoundarysw8ttG9a1gakIbQt
        Content-Disposition: form-data; name="upload"; filename="menu.png"
        Content-Type: image/png


        ------WebKitFormBoundarysw8ttG9a1gakIbQt--

        你瀏覽器上傳文件是上傳到你自己的服務器,你接收后在傳到其他服務器時,才需要用 HTTPclient
        這是接力,不要搞混了!

        你瀏覽器上傳文件是上傳到你自己的服務器,你接收后在傳到其他服務器時,才需要用 HTTPclient
        這是接力,不要搞混了!



        不能直接傳到另一個服務器嗎

        不能!
        因為瀏覽器上傳文件結束時,jsp 才開始工作
        而 HTTPclient 只是模擬了瀏覽器,也是文件方式上傳文件
        如果你想在 jsp 中一邊接收上傳文件的數據,一邊向上級服務器發送的話
        一是要你自己寫文件接收程序,二是要用 socket 向上級服務器發送
        涉及的知識太多,你一時半會是搞不起來的

        不能!
        因為瀏覽器上傳文件結束時,jsp 才開始工作
        而 HTTPclient 只是模擬了瀏覽器,也是文件方式上傳文件
        如果你想在 jsp 中一邊接收上傳文件的數據,一邊向上級服務器發送的話
        一是要你自己寫文件接收程序,二是要用 socket 向上級服務器發送
        涉及的知識太多,你一時半會是搞不起來的



        好像是可以的,我看了下他們以前的代碼,是可以的,不需要那么麻煩,他們是這么寫的

        下面這個方法就是我上面說的那個路徑 Request URL:http://localhost:8080/proxy/api/images/attachments/json/0/67/0/0/-1?Type=Image&CKEditor=textEditor&CKEditorFuncNum=1&langCode=zh-cn
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String targerUrl =request.getRequestURI();
        HttpProxy.request(request, response, targerUrl);// 代理請求
        }

        /**
        * 代理請求
        *
        * @param request
        * - 請求
        * @param response
        * - 響應
        * @param targetUrl
        * - 目標服務器地址
        * @param encoding
        * - 目標服務器的編碼格式
        * @return
        * @throws IOException
        */
        public static void request(HttpServletRequest request, HttpServletResponse response, String targetUrl) throws IOException {

        // System.out.println("進入Http代理");

        // 目標url
        if (null == targetUrl) {
        throw new IOException("缺少目標服務器地址");
        }

        // 目標服務器地址
        String url = null;

        // 獲取目標服務器地址,并對目標服務器中的中文進行重新編碼
        try {
        url = ProxyUtils.rebuildURL2(targetUrl, "utf-8");
        } catch (Exception e) {
        e.printStackTrace();
        }

        // 請求參數
        Map params = new HashMap();

        // 請求頭部信息
        Map headers = new HashMap();

        // 客戶端請求方式
        String method = request.getMethod();

        logger.info("[代理請求] method: " + method + ": " + url);

        // 獲取請求頭部信息的枚舉
        Enumeration headersEnu = request.getHeaderNames();
        while (headersEnu.hasMoreElements()) {
        // 取得請求頭部名稱
        String headerName = (String) headersEnu.nextElement();
        String headerValue = request.getHeader(headerName);
        headers.put(headerName.toLowerCase(), headerValue);
        logger.info("\t[header] " + headerName + "=" + headerValue);
        }

        // 如果有指定請求頭部,就覆蓋原來請求頭部
        if (null != headerMap && headerMap.size() > 0) {
        for (String key : headerMap.keySet()) {
        headers.put(key.toLowerCase(), headerMap.get(key));
        }
        }
        // 獲取參數鍵值名稱
        Enumeration enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
        // 取得參數名稱列表
        String paramName = (String) enu.nextElement();
        // 處理本請求參數以及發送給第三方服務器的參數
        String paramValue = request.getParameter(paramName);
        params.put(paramName, paramValue);
        logger.info("\t[參數] " + paramName + "=" + paramValue);
        }

        // 取得ajax代理
        AjaxProxy proxy = ProxyFactory.getProxyInstance(method, url, params, headers);

        // // 請求body
        // String requestBody = readFileByLines(request.getInputStream());
        //
        // System.out.println("\n[requestBody]" + requestBody);

        // 獲取ajax代理響應
        AjaxResponse resp = null;

        // 若是post請求,且屬于表單上傳時(multipart/form-data),傳遞input流
        String contentType = headers.get("content-type");
        boolean isUpload = null != contentType && contentType.toLowerCase().indexOf("multipart/form-data") >= 0;

        // 1,當請求的資源是圖片時,直接使用流作為response返回結果
        String accept = headers.get("accept");
        boolean useStream4response = null != accept ? (accept.indexOf("image/") >= 0) : true;

        // 始終使用流作為返回值
        useStream4response = true;

        if ("post".equalsIgnoreCase(method) && isUpload) {
        useStream4response = false;
        // 期望上傳圖片后返回xml格式數據
        headers.put("accept", "application/json");
        resp = proxy.getAjaxResponse(request.getInputStream());
        // } else if ( "put".equalsIgnoreCase(method) && params.size() > 0 )
        // {
        // // put請求, 且具有參數, 傳遞input流
        // resp = proxy.getAjaxResponse(request.getInputStream());
        } else if (useStream4response) {
        OutputStream out = response.getOutputStream();
        resp = proxy.getAjaxResponse(out);
        out.flush();
        } else {
        resp = proxy.getAjaxResponse();
        }

        // 取得方法
        HttpMessage httpMethod = resp.getMethod();

        // 無響應時httpMethod為null
        if (null == httpMethod) {
        logger.info("[代理請求失敗] http code: " + resp.getStatusCode() + ": " + url);
        return;
        }

        // 取得響應頭部
        Header[] respHheaders = httpMethod.getAllHeaders();
        for (int i = 0, len = respHheaders.length; i < len; i++) {
        Header header = respHheaders[i];
        if (!isOverrideCookie && "Set-Cookie".equalsIgnoreCase(header.getName())) {
        continue;
        }
        if ("content-type".equalsIgnoreCase(header.getName())) {
        if ("post".equalsIgnoreCase(method) && isUpload) {
        // 若是上傳,則不覆蓋contentType
        response.setCharacterEncoding("utf-8");
        continue;
        }
        }
        response.setHeader(header.getName(), header.getValue());
        logger.info("\t[response header] " + header.getName() + "=" + header.getValue());
        }

        // 輸出
        if (useStream4response) {
        logger.info("請求地址: " + url + "\n-----返回結果: [Stream]");
        } else {
        PrintWriter out = response.getWriter();
        String result = resp.getContent();
        out.print(result);
        }
        return;
        }

        用這個紅色的代碼給上傳上去了

        你按他寫的成功了嗎?

        他的思路是完全不同的,他是寫了一個代理服務器
        用你的服務器中站客戶端請求

        需要注意的是,寫代理服務器時,不要窺視用戶數據。這是有違職業道德的

        對,這個就成功了,沒有窺視,他這就是相當于把瀏覽器請求的信息全部拿到再去用代理請求一次,把數據原封不動的再去請求

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        HTTPclient使用MultipartEntity怎么上傳文件_html/css_WEB-ITnose

        HTTPclient使用MultipartEntity怎么上傳文件_html/css_WEB-ITnose:jsp HTTPclient MultipartEntity multipart/form-data jsp 頁面上傳文件代碼: httpclient 不知道怎么寫, 網上查了一大堆都是你抄我我抄你的, 網上都是這么寫的 jsp 代碼是下面這樣的 后天代碼都是這樣寫的 MultipartEn
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品动漫人成3d在线 | 亚洲av成人无码网站…| 99久久久国产精品免费牛牛| 国产亚洲福利精品一区| 免费a级毛片无码a∨免费软件| 精品免费人成视频app| 亚洲狠狠ady亚洲精品大秀| 人人鲁免费播放视频人人香蕉| 亚洲一级免费视频| 亚洲成人黄色在线观看| 免费看国产精品3a黄的视频| 最新国产精品亚洲| 亚洲中文字幕无码爆乳AV| 国产免费变态视频网址网站| 亚洲天然素人无码专区| 亚洲日韩亚洲另类激情文学| 动漫黄网站免费永久在线观看| 亚洲精品国产精品乱码不卡√| 国产成人综合久久精品亚洲| 亚洲中文字幕无码爆乳av中文| 亚洲永久在线观看| 国产免费资源高清小视频在线观看| 内射少妇36P亚洲区| 国语成本人片免费av无码| 亚洲GV天堂无码男同在线观看| 免费国产黄网站在线观看视频| 亚洲色偷拍区另类无码专区| a毛片在线看片免费| 亚洲专区中文字幕| a级毛片毛片免费观看久潮| 中文字幕亚洲综合久久2| 免费在线观影网站| 亚洲成人免费网址| 亚洲av无码天堂一区二区三区| 亚洲国产AV无码一区二区三区| 国产成人精品久久免费动漫| 美女羞羞视频免费网站| 亚洲尹人九九大色香蕉网站| 午夜免费福利视频| 国产精品亚洲一区二区三区| 国产亚洲福利精品一区|