1. 程式人生 > 其它 >Java實現檔案的上傳下載

Java實現檔案的上傳下載

技術標籤:javaspringhttp

用這篇文章來介紹一種Java檔案上傳和下載的方法。可以將上傳的檔案儲存到本地磁碟或者伺服器,同時,可再從此路徑將檔案下載,前面不過多介紹了,一些解釋都在程式碼註釋裡。

/**
     * 上傳
     * @param file file
     * @param taskId taskId
     * @return String
     */
    public String fileUpload(MultipartFile file, String taskId) {

        Long checkTaskId = Long.
parseLong(taskId); String originalFilename; if (file.isEmpty()) { return "檔案不存在"; } else { //獲取檔名稱,包含格式(fileName.pdf) originalFilename = file.getOriginalFilename(); //如有必要將檔案上傳至資料庫(我的業務中檔案與某個操作關聯 //所以在插入之前應該判斷資料庫中是否已存在)
//判斷資料庫中該操作下的該檔案是否已存在(程式碼略) fileTaskDao.insertFileOfTask(originalFilename, checkTaskId); log.info("# originalFilename=[{}] , name=[{}] , size=[{}] , contentType=[{}] ", originalFilename, file.getName(), file.getSize(), file.getContentType()); try
{ if(StringUtils.isNotEmpty(originalFilename)){ //建立資料夾,filePath是檔案儲存路徑,我是寫在配置檔案裡,用@Value注進來 File fileDir = new File(filePath); if(!fileDir.exists()){ boolean mkdir = fileDir.mkdir(); if (!mkdir){ log.info("fileDir 資料夾建立失敗"); return Result.fail(ResultType.FAIL.getCode(), "檔案上傳失敗"); } } //用apache.commons.io.FileUtils類的方法copyInputStreamToFile //拷貝一個位元組流到一個檔案中,如果這個檔案不存在則建立,存在將被重寫進內容 FileUtils.copyInputStreamToFile(file.getInputStream(), new File(fileRealPath, originalFilename)); } } catch (IOException e) { e.printStackTrace(); return Result.fail(ResultType.FAIL.getCode(), "檔案上傳失敗"); } } return Result.success(ResultType.SUCCESS.getCode(), "檔案上傳成功"); }
/**
     * 下載
     * @param checkTaskId checkTaskId
     * @param fileName fileName
     * @return ResponseEntity<byte[]>
     */
    public ResponseEntity<byte[]> downloadFile(String fileName, String checkTaskId) throws IOException {

        //檔案下載路徑,這個路徑在上面說了,注意要加檔名
        String Path = filePath + fileName;
        log.info("# download Path=[{}]", Path);
        File file = new File(Path);
        HttpHeaders headers = new HttpHeaders();
        //application/octet-stream屬於HTTP規範中Content-Type的一種,其只能提交二進位制
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", new String(file.getName().getBytes(StandardCharsets.UTF_8), "ISO8859-1"));
        //readFileToByteArray 把一個檔案轉換成位元組陣列返回
        return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
        //頁面直接彈出下載框,就結束咯
    }

點關注 不迷路,一起解決更多問題,微信公眾號:非定義式程式設計師