使用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