首頁 > 軟體

Java使用HttpClient實現檔案下載

2022-08-14 14:00:53

使用HttpClient實現檔案下載,供大家參考,具體內容如下

伺服器端:

1、伺服器端是一個SpringBoot服務,寫了一個介面用於使用者端請求檔案,使用者端攜帶引數(檔名fileName)使用Get方式請求;

2、伺服器端獲取到檔名後將與本地倉庫地址E:/downloadRepository/組成絕對路徑,獲取檔案轉換成流,最後利用OutputStream物件將緩衝區的資料送到使用者端;

3、緩衝區大小也可設定為一個定值(如:1024*1024),然後再回圈寫入輸出流物件;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;

@RestController
public class RequestController {
    @RequestMapping(path = "/download", method = RequestMethod.GET)
    public void downLoad(HttpServletResponse response, String fileName){
        File file = new File("E:/downloadRepository/" + fileName);
        try{
            InputStream inputStream = new BufferedInputStream (new FileInputStream(file));
            //建立緩衝區
            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
            inputStream.close();
            OutputStream outputStream = new BufferedOutputStream(response
                    .getOutputStream());
            outputStream.write(buffer);
            outputStream.flush();
            outputStream.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

原檔案:

1、原檔案所在地址;

2、原檔案內容;

使用者端:

1、請求引數為一個檔案的檔名,這裡我們通過URIBuilder物件的addParameter()方法來進行設定請求引數;

2、在狀態碼等於200時,將請求來的檔案利用FileUtils工具類將字串轉換成檔案,並且該方法可以設定儲存路徑;

import org.apache.commons.io.FileUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.*;

public class RequestFileService {

    public void httpRequest(String fileName) {
            // 請求地址
            String url = "http://localhost:8080/download";
            // 下載檔案儲存路徑
            String savePath = "E:/demo/" + fileName;
            CloseableHttpClient httpclient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            try {
                // 使用URIBuilder物件用於設定請求引數
                URIBuilder urlBuilder = new URIBuilder(url);
                urlBuilder.addParameter("fileName", fileName);
                HttpGet httpGet = new HttpGet(urlBuilder.build());
                // 執行請求
                response = httpclient.execute(httpGet);
                if (response.getStatusLine().getStatusCode() == 200) {
                    String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                    // 將請求內容轉換成檔案並儲存
                    FileUtils.writeStringToFile(new File(savePath), content, "UTF-8");
                }
            } catch (Exception e) {
                e.getStackTrace();
            }finally {
                try {
                    response.close();
                    httpclient.close();
                }catch (IOException e){
                    e.getStackTrace();
                }
            }
    }

    public static void main(String[] args) {
        RequestFileService requestFileService = new RequestFileService();
        //引數為請求檔名
        requestFileService.httpRequest("205老麵館.txt");
    }
}

下載結果:

1、按照程式碼所設定的路徑,應該存在E:/demo/目錄下;

2、檢查檔案完整性,沒啥問題:)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com