1. 程式人生 > >使用ajax,Jquery,Spring Boot,MultipartFile實現檔案上傳功能

使用ajax,Jquery,Spring Boot,MultipartFile實現檔案上傳功能

MultipartFile

方法總結
 byte[] getBytes() 
返回檔案的內容作為一個位元組陣列。
 String getContentType() 
返回檔案的內容型別。
 InputStream getInputStream() 
返回InputStream讀取檔案的內容。
 String getName() 
返回引數的名稱多部分的形式。
 String getOriginalFilename() 
返回原來的檔名在客戶機的檔案系統。
 long getSize() 
返回檔案的大小,以位元組為單位。
 boolean isEmpty() 
返回是否上傳檔案是空的,也就是說,沒有檔案 選擇多部分形式或所選的檔案中沒有的內容。
 void transferTo(File dest) 
接收到的檔案轉移到給定的目標檔案。
方法的細節

getName

字串 getName()

返回引數的名稱多部分的形式。

 

返回:

引數的名稱(沒有null或空)


getOriginalFilename

字串 getOriginalFilename()

返回原來的檔名在客戶機的檔案系統。

這可能包含路徑資訊取決於所使用的瀏覽器, 但它通常不會與任何其他比歌劇。

 

返回:

原來的檔名,或空字串如果沒有檔案 多部分形式的選擇


getContentType

字串 getContentType()

返回檔案的內容型別。

 

返回:

內容型別,或null如果沒有定義 (或多部分沒有選擇檔案的形式)


isEmpty

布林isEmpty()

返回是否上傳檔案是空的,也就是說,沒有檔案 選擇多部分形式或所選的檔案中沒有的內容。

 


getSize

長getSize()

返回檔案的大小,以位元組為單位。

 

返回:

檔案的大小,如果空或0


getBytes

byte[]getBytes()
丟擲IOException

返回檔案的內容作為一個位元組陣列。

 

返回:

檔案的內容作為位元組,如果空或空位元組陣列

丟擲:

IOException在訪問錯誤的情況下(如果臨時儲存失敗)


getInputStream

InputStream getInputStream()
丟擲IOException

返回InputStream讀取檔案的內容。 使用者負責關閉流。

 

返回:

檔案的內容流,如果空或空流

丟擲:

IOException在訪問錯誤的情況下(如果臨時儲存失敗)


transferTo

無效transferTo(檔案桌子)
丟擲IOException,IllegalStateException

接收到的檔案轉移到給定的目標檔案。

這個可以移動檔案的檔案系統,複製檔案 檔案系統,或者記憶體內容儲存到目標檔案。 如果目標檔案已經存在,它將被刪除。

如果檔案被移動的檔案系統,這個操作不能 再次被呼叫。 因此,呼叫這個方法能夠僅僅一次 適用於任何儲存機制。

 

引數:

dest——目標檔案

丟擲:

IOException——在閱讀或寫作的錯誤

IllegalStateException如果檔案已被移動 在檔案系統和不可用了另一個轉移

 

例項:

需求規格:實現上傳檔案功能,並將上傳的檔案內容轉換成二進位制ByteBuffer的形式,作為服務的入參。

使用技術:html,JS,JQuery(miniUI),Ajax,MultipartFile;SpringBoot框架

html程式碼:

<div>

         <form>

                  <input id = "file"   type="file"   name = "file"/>

                 <div id = "upload"  class="mini-button"  iconCls = "mini-icon-upload">上傳</div>

         </form>

</div>

 

JS程式碼:

$("#upload").on("click",function(){

     FileUpload();

});

 

function FileUpload(){

     var formData = new FormData();

     formData.append("files",$("#file")[0].files[0]);

     $.ajax({

           type:"POST",

           url:contextPath+"/XXX/XXX",

           data:formData,

           dataType:"json",

           mimeType:"multipart/form-data",

           cache:false,

           processData:false,

           contentType:false,

           success:function(data){

                   if(11 === data.status){

                              alert("匯入成功");

                    }else{

                              alert("匯入失敗");

                    }

          }

     });

}

 

java程式碼:

@Autowired

DHGHXLDRConfig dhghxldrConfig;

@RequestMapping("/getFileToByte")

@ResponseBody

public Object getFileToByte(@RequestParam(value="files",required=false) MultipartFile multipartFile,HttpServletRequest  request)

{

       String realpath = "";

       String name = "";

       if(multipartFile  !=  null){

              long size = multipartFile.getSize();

             if(size > 100*1024){

                     JsonResult.errorException("");

             }

             name = multipartFile.getOriginalFilename();

             String subffix = name.substring(name.lastIndexOf(".")+1,name.length());

             String filePath = dhghxldrConfig.getXlfilePath();

             File file = new File(filePath,name);

             byte[] by = new byte[(int)file.length()];

            try{

                      FileInputStream inputStream = new FileInputStream(file);

                      ByteArrayOutputStream byteStream = new ByteArrayOutputStream();

                      byte[] bb = new byte[2048];

                      int ch;

                      ch = inputStream.read(bb);

                      while(ch != -1){

                             bytestream.write(bb,0,ch);

                             ch = inputStream.read(bb);

                      }

                      by = bytestream.toByteArray();

                      buffer = ByteBuffer.wrap(by);

                      //根據業務調介面,傳引數

                }catch(FileNotFoundException e){

                       e.printStackTrace();

                }catch(IOException e){

                       e.printStackTrace();

                }catch(TException e){

                       e.printStackTrace();

                }

                return JsonResult.ok("");

       }

       return JsonResult.errorExcption("");

}

 

JsonResult程式碼:

public class JsonResult {

private static final int STATUS_OK = 11;

private static final int STATUS_EXCEPTION = 22;

private static final int STATUS_OTHER = 33;

 

private int status;

private String tips;

private Object content;

 

private JsonResult(int status,String tips,Object content){

this.status = status;

this.tips = tips;

this.content = content;

}

 

public int getStatus() {

return status;

}

 

public void setStatus(int status) {

this.status = status;

}

 

public String getTips() {

return tips;

}

 

public void setTips(String tips) {

this.tips = tips;

}

 

public Object getContent() {

return content;

}

 

public void setContent(Object content) {

this.content = content;

}

 

public static int getStatusOk() {

return STATUS_OK;

}

 

public static int getStatusException() {

return STATUS_EXCEPTION;

}

 

public static int getStatusOther() {

return STATUS_OTHER;

}

 

public static JsonResult errorExceptoin(String errMessage){

return new JsonResult(STATUS_EXCEPTION,errMessage,null);

}

 

public static JsonResult ok(Object content){ return new JsonResult(STATUS_OK,"SUCCESS",content);}

 

public static JsonResult other(String otherMessage){return new JsonResult(STATUS_OTHER,otherMessage,null);}

}

 

DHGHXLDRConfig程式碼:

@Configuration

public class DHGHXLDRConfig{

     @Value("${dhgh.xlfile}")

     private String getXlfilePath(){

         return xlfilePath;

    }

    public String getXlfilePath(){

        return xlfilePath;

   }

 

   public void setXlfilePath(String xlfilePath){

        this.xlfilePath = xlfilePath;

  }

}

 

application.yml需要新增內容:(不在yml裡新增上傳大小,會使用框架預設值,可能會一起報錯,檔案過大:)

 

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException

 

Spring:

   servlet:

     multipart:

         max-file-size:100Mb

         max-request-size:100Mb

dddd:

   xlfile:D:/XXX/XXX/XXX

參考文件:https://www.cnblogs.com/chenhonggao/p/8994598.html

 

學習部落格:https://blog.csdn.net/zhaoxiang10052111/article/details/79899284