springboot項目關於文件的上傳與下載


springboot頁面需要實現文件的上傳與下載

貼出部分代碼

html代碼

文件的下載

        <form target="name" id="download_dubbo_form" name="download_dubbo_form" method="post" action="/jfpointscore-test/download">
               <button id="download_dubbo_config" type="button" class="btn btn-default download_dubbo_config" onclick="download_dubbo_config2();">下載</button>
        </form>

文件的上傳

            <form id="upload_dubbo_form" name="upload_dubbo_form" method="post" enctype="multipart/form-data">
                <div class="upload_dubbo_container_div">
                    <font class="upload_dubbo_container_font">請上傳dubbo配置:</font><input type="file" id="file" name="file" multiple="multiple" class="btn btn-default upload_dubbo_container_button"/>
                </div>
                <div class="upload_dubbo_container_div">
                    <font class="upload_dubbo_container_font">請上傳facade包:</font><input type="file" id="file" name="file" multiple="multiple" class="btn btn-default upload_dubbo_container_button"/>
                </div>
            </form>

js部分

下載按鈕

//下載按鈕
function download_dubbo_config2(){
    $.ajax({
        type: "post",
        url: url,
        cache: false,
        async : false,
        timeout: 15000,          // 設置超時時間
        success: function (data ,textStatus, jqXHR)
        {
            if (textStatus == "success") {
                $("#download_dubbo_form").submit();
            }
        },
        error:function (XMLHttpRequest, textStatus, errorThrown) {
            console.log("請求失敗!");
        },
        complete: function (XMLHttpRequest,status) {
            if(status == 'timeout') {
                console.log("網絡超時,請刷新");
            }
        }
     });
}

 

上傳按鈕

//上傳按鈕
function upload_dubbo_config(){ var formData = new FormData($("#upload_dubbo_form")[0]);  //重點:要用這種方法接收表單的參數
    $.ajax({
        type: "post",
        url: url,
        cache: false,
        data: formData,
        async : true,
        timeout: 15000,          // 設置超時時間
        // 告訴jQuery不要去處理發送的數據
        processData : false,
        // 告訴jQuery不要去設置Content-Type請求頭
        contentType : false,
        success: function (data ,textStatus, jqXHR)
        {
            if (parseInt(data) == 1) {
                complete = 1;
            }
        },
        error:function (XMLHttpRequest, textStatus, errorThrown) {
            console.log("請求失敗!");
        },
        complete: function (XMLHttpRequest,status) {
            if(status == 'timeout') {
                console.log("網絡超時,請刷新");
            }
        }
     });

}

 

后台代碼部分需要自行修改,大體代碼如下:

package com.jfpointscore.controller;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.jfpointscore.entity.common.JsonResponse;

@RestController
public class FileController {

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    @ResponseBody
    public String handleFileUpload(HttpServletRequest request){
        List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file");
        MultipartFile file = null;
        BufferedOutputStream stream = null;
        for (int i =0; i< files.size(); ++i) {
            file = files.get(i);
            if (!file.isEmpty()) {
                try {
                   BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("D:\\logs\\" + file.getOriginalFilename())));
                   bufferedOutputStream.write(file.getBytes());
                   bufferedOutputStream.flush();
                   bufferedOutputStream.close();
                } catch (Exception e) {
                    return "You failed to upload " + i + " => " + e.getMessage();
                }
            } else {
                return "You failed to upload " + i + " because the file was empty.";
            }
        }
        return "1";
    }


//    //文件下載相關代碼
//    //@RequestMapping(value = "/download",method = RequestMethod.POST)
//    public String download(@RequestBody Map<String, String> map) throws Exception {
//        String url = map.get("url");
//        BufferedInputStream bis = null;
//        BufferedOutputStream bos = null;
//        //獲取下載文件露肩
//        String downLoadPath = "C:\\Users\\Island\\Desktop\\1533471907(1).png";
//        /*response.setHeader("content-type", "application/octet-stream");
//        //獲取文件的長度
//        long fileLength = new File(downLoadPath).length();
//        //設置文件輸出類型
//        response.setContentType("application/octet-stream");
//        //設置輸出長度
//        response.setHeader("Content-Length", String.valueOf(fileLength));*/
//    /********************************************************************/
//        //獲取輸入流
//        bis = new BufferedInputStream(new FileInputStream(downLoadPath));
//        //輸出流
//        bos = new BufferedOutputStream(new FileOutputStream(new File(url+"\\test.png")));
//        byte[] buff = new byte[2048];
//        int bytesRead;
//        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
//            bos.write(buff, 0, bytesRead);
//        }
//        //關閉流
//        bis.close();
//        bos.close();
//    return "1";
//}

    @RequestMapping(value = "/download",method = RequestMethod.POST)
    public ResponseEntity<JsonResponse> download(HttpServletRequest req,HttpServletResponse response){
        JsonResponse jr = new JsonResponse();
        String path = "C:\\Users\\Island\\Desktop\\winscp-download.bat";
//        String path = null;
        try {
            File file = new File(path);
            long size = file.length();
            String fileName = new String("winscp-download.bat".getBytes("UTF-8"), "iso-8859-1");//為了解決中文名稱亂碼問題
            response.reset();
            response.setHeader("Accept-Ranges", "bytes");
            //設置文件下載是以附件的形式下載
            response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));
            response.addHeader("Content-Length", String.valueOf(size));

            ServletOutputStream sos = response.getOutputStream();
            FileInputStream in = new FileInputStream(file);
            BufferedOutputStream outputStream = new BufferedOutputStream(sos);
            byte[] b = new byte[1024];
            int i = 0;
            while ((i = in.read(b)) > 0) {
                outputStream.write(b, 0, i);
            }
            outputStream.flush();
            sos.close();
            outputStream.close();
            in.close();
            jr.setStatus("00");
        } catch (Exception e) {
            System.out.println(e);
            jr = null;
        }
        return ResponseEntity.ok(jr);
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM