国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java通過httpclient攜帶請(qǐng)求頭參數(shù)獲取第三方文件流接口并實(shí)現(xiàn)實(shí)現(xiàn)文件下載

這篇具有很好參考價(jià)值的文章主要介紹了java通過httpclient攜帶請(qǐng)求頭參數(shù)獲取第三方文件流接口并實(shí)現(xiàn)實(shí)現(xiàn)文件下載。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

創(chuàng)建httpclient 請(qǐng)求,并在header攜帶指定key,也可根據(jù)實(shí)際需要攜帶token等信息。獲取第三方接口返回的文件輸入流并寫到本地response中,實(shí)現(xiàn)返回文件流,前端通過js的a標(biāo)簽進(jìn)行下載。

代碼如下:

@Override
    public void YKDownload(String fileId, HttpServletResponse response, HttpServletRequest request) {
        logger.info("下載盈科附件, 參數(shù):附件id = " + fileId);
        // 創(chuàng)建默認(rèn)的httpClient實(shí)例.
        CloseableHttpClient httpclient = HttpClients.createDefault();
        // 創(chuàng)建httpGet
        HttpGet httpGet = new HttpGet("xxxxx" + fileId);
        try {
			// 設(shè)置請(qǐng)求頭參數(shù)
            httpGet.setHeader("xxxx-Key", "xxxxxx");
            CloseableHttpResponse httpResponse = httpclient.execute(httpGet);
			// 獲取第三方接口放在Response中的文件名
            Header[] headers = httpResponse.getHeaders("content-disposition");
            if (headers != null && headers.length > 0) {
                String contentDispositionValue = headers[0].getValue();
				// 設(shè)置文件名,這里沒用加密文件名,可以自己設(shè)置
                response.addHeader("Content-Disposition", contentDispositionValue);
            }
            response.setContentType("application/octet-stream;charset=utf-8");
            HttpEntity entity = httpResponse.getEntity();
            InputStream inputStream = entity.getContent(); //獲取輸入流
			
            //  保存流 從這里到重置游標(biāo)
			//  附件第一次下載沒問題再下載有時(shí)候就報(bào)錯(cuò),然后參照其他博主的方法,將流先保存下來
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            BufferedInputStream br = new BufferedInputStream(inputStream);
            byte[] b = new byte[1024];
            for (int c = 0; (c = br.read(b)) != -1;)
            {
                bos.write(b, 0, c);
            }
            b = null;
            br.close();
            inputStream = new ByteArrayInputStream(bos.toByteArray());
            // 第一次讀流
            StringBuffer out = new StringBuffer();
            byte[] b1 = new byte[1024];
            for (int n; (n = inputStream.read(b1)) != -1;) {
                out.append(new String(b1, 0, n));  //這個(gè)可以用來讀取文件內(nèi)容 并且文件內(nèi)容有中文讀取出來也不會(huì)亂碼
            }
            // 判斷文件是否存在
            String resultHtml = out.toString();
            int firstIndex = resultHtml.indexOf("\n");
            if(firstIndex < 0){
                logger.info("文件不存在或異常"+resultHtml);
            }
            // 重置游標(biāo)
            inputStream.reset();


            // 輸出文件
            ServletOutputStream outputStream = response.getOutputStream();
            try {
                byte[] oBuff = new byte[1024];
                int iSize;
                while (-1 != (iSize = inputStream.read(oBuff))) {
                    outputStream.write(oBuff, 0, iSize);
                }
                outputStream.flush();
            } finally {
                IOUtils.close(outputStream);
                IOUtils.close(inputStream);
            }
            outputStream.close();
        } catch (Exception e) {
            logger.info("下載盈科附件, 原因:" + e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

前端js代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-588633.html

function fileYKDownload(fileId, fileName) {
    //創(chuàng)建XMLHttpRequest對(duì)象
    var httpRequest = new XMLHttpRequest();
    //打開連接,將請(qǐng)求參數(shù)拼在url后面
    httpRequest.open('GET', __baseUrl + '/v3/query/accessories/download?fileId=' + fileId, true);
    //設(shè)置期望的返回值類型
    httpRequest.responseType = "blob";
    //設(shè)置請(qǐng)求頭,將認(rèn)證信息放入請(qǐng)求頭中
    httpRequest.setRequestHeader("PRIVATETOKEN",$.getCookie(__token));

    //請(qǐng)求成功回調(diào)函數(shù)
    httpRequest.onload = function (oEvent) {
        if (httpRequest.status === 200) {
			// 這里文件名可以從response中獲取,為了方便我直接js方法傳的文件名
            // var fileName = decodeURI(httpRequest.getResponseHeader("Content-Disposition"));
            console.log(fileName);
            var response = httpRequest.response;

            //數(shù)據(jù)轉(zhuǎn)換為文件下載
            var elink = document.createElement('a');
            elink.download = fileName;
            elink.style.display = 'none';
            var blob = new Blob([response]);
            elink.href = URL.createObjectURL(blob);
            document.body.appendChild(elink);
            elink.click();
            document.body.removeChild(elink);
        }
    }
    //發(fā)送請(qǐng)求
    httpRequest.send();
}

到了這里,關(guān)于java通過httpclient攜帶請(qǐng)求頭參數(shù)獲取第三方文件流接口并實(shí)現(xiàn)實(shí)現(xiàn)文件下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用HttpURLConnection發(fā)送POST請(qǐng)求并攜帶請(qǐng)求參數(shù)

    這里的param是請(qǐng)求參數(shù),需要將其轉(zhuǎn)換為字節(jié)數(shù)組后寫入輸出流。 這里的response是響應(yīng)數(shù)據(jù),需要將其讀取為字符串后使用。 完整的示例代碼如下所示: 需要注意的是,以上示例代碼中的請(qǐng)求參數(shù)是以字符串形式傳遞的,如果需要傳遞復(fù)雜的請(qǐng)求參數(shù),可以考慮使用JSON等格

    2024年02月04日
    瀏覽(26)
  • Flutter攜帶JSON參數(shù)post請(qǐng)求

    在Flutter中發(fā)送帶有JSON參數(shù)的網(wǎng)絡(luò)請(qǐng)求,你可以使用HTTP庫(如 http 或 dio )來實(shí)現(xiàn)。以下是使用 http 庫發(fā)送網(wǎng)絡(luò)請(qǐng)求并攜帶JSON參數(shù)的示例: 在上述示例中,首先創(chuàng)建一個(gè)參數(shù)Map,并將其轉(zhuǎn)換為JSON字符串。然后設(shè)置請(qǐng)求頭,使其指明請(qǐng)求類型為JSON。最后使用 http.post() 方法發(fā)送

    2024年02月14日
    瀏覽(21)
  • Java獲取請(qǐng)求頭、參數(shù)、路徑、

    request.getReader()和request.getParameter(\\\"key\\\") 方法只能讀取一次,重復(fù)讀取會(huì)報(bào)IO異常 從? ContainerRequestContext? ?對(duì)象 獲取請(qǐng)求頭、路徑、參數(shù) ?注意:這里MultivaluedMap和map不同,遍歷的時(shí)候也不同,MultivaluedMap?一個(gè)key?可以有多個(gè)值 ,?map一個(gè)key?只對(duì)應(yīng)一個(gè)值 舉個(gè)例子: 從 Http

    2023年04月23日
    瀏覽(24)
  • HTTP POST接口帶參數(shù)的HttpClient請(qǐng)求方法和調(diào)用

    HTTP POST接口帶參數(shù)的HttpClient請(qǐng)求方法和調(diào)用

    接口自動(dòng)化測(cè)試,今天遇到POST接口帶參數(shù),參數(shù)在url上,發(fā)現(xiàn)原來的工具類中沒有該方法,重新調(diào)試加上。 ?doPost方法如下: 參考: [Java 接口自動(dòng)化框架]httpclient4.5.3(CloseableHttpClient) https的工具類HttpsClientUtils

    2024年02月06日
    瀏覽(19)
  • Vue使用axios發(fā)送get請(qǐng)求并攜帶參數(shù)

    Vue使用axios發(fā)送get請(qǐng)求并攜帶參數(shù)

    其實(shí)關(guān)于Vue使用axios發(fā)送get請(qǐng)求并攜帶參數(shù),我之前寫過一篇,但是昨天又發(fā)現(xiàn)了另外一種方式,所以就單獨(dú)寫一篇進(jìn)行總結(jié)。 之前寫的那篇使用get請(qǐng)求并攜帶參數(shù)都是使用的字符串拼接的方式 感興趣可以參考: Vue使用axios進(jìn)行g(shù)et請(qǐng)求拼接參數(shù)的兩種方式 關(guān)于如何使用安裝

    2023年04月10日
    瀏覽(21)
  • 【Java】如何通過一次請(qǐng)求獲取多張圖片

    【Java】如何通過一次請(qǐng)求獲取多張圖片

    背景:一次請(qǐng)求響應(yīng)一張圖片 這是我們熟練的業(yè)務(wù),就是用戶訪問我們編寫的接口,后端服務(wù)就響應(yīng)一張圖片給網(wǎng)頁,也就是一個(gè)url對(duì)應(yīng)的就是一個(gè)圖片資源 下面是具體的業(yè)務(wù)代碼和注釋 編寫完這些代碼后運(yùn)行后端服務(wù),然后我們?cè)诰W(wǎng)頁上訪問這個(gè)接口 ?圖片成功的在網(wǎng)頁

    2024年02月07日
    瀏覽(21)
  • 【Java 進(jìn)階篇】Java Request 獲取請(qǐng)求參數(shù)的通用方式詳解

    【Java 進(jìn)階篇】Java Request 獲取請(qǐng)求參數(shù)的通用方式詳解

    在Java Web開發(fā)中,獲取HTTP請(qǐng)求的參數(shù)是一項(xiàng)基本任務(wù)。請(qǐng)求參數(shù)可以包含在URL中,也可以包含在請(qǐng)求體中,例如表單提交時(shí)的參數(shù)。在Java中,可以使用 HttpServletRequest 對(duì)象來獲取HTTP請(qǐng)求的參數(shù)。本文將詳細(xì)解釋如何使用Java獲取HTTP請(qǐng)求的參數(shù),包括通用的方式以及示例代碼。

    2024年02月05日
    瀏覽(35)
  • 前端實(shí)現(xiàn)window.open實(shí)現(xiàn)pdf預(yù)覽以及請(qǐng)求時(shí)攜帶請(qǐng)求頭通過后端權(quán)限校驗(yàn)

    需求是點(diǎn)擊預(yù)覽時(shí) 跳轉(zhuǎn)的一個(gè)新的頁面展示 window.open攜帶不了token進(jìn)行一個(gè)請(qǐng)求 window.open()方法直接根據(jù)文件路徑進(jìn)行跳轉(zhuǎn) 根本沒有走請(qǐng)求 自然攜帶不了token,知道原因以后就好解決了 我們可以先通過window.opne()方法 把我們需要的參數(shù)傳遞并打開一個(gè)新的頁面 Window open() 方法

    2024年02月15日
    瀏覽(36)
  • Java HttpClient爬蟲請(qǐng)求

    添加依賴 pom文件 GET 無參形式 GET帶參請(qǐng)求 POST無參請(qǐng)求 POST帶參請(qǐng)求

    2024年02月16日
    瀏覽(23)
  • java httpclient 請(qǐng)求

    要使用Java的HttpClient庫發(fā)送HTTP請(qǐng)求,您需要導(dǎo)入相應(yīng)的庫并編寫Java代碼。HttpClient是Apache HttpComponents項(xiàng)目的一部分,可以使用它來執(zhí)行HTTP請(qǐng)求。以下是一個(gè)簡(jiǎn)單的示例,演示如何使用HttpClient發(fā)送GET請(qǐng)求: import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; im

    2024年02月07日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包