实现异步文件上传功能!

This commit is contained in:
Kane 2022-09-30 00:41:42 +08:00
parent 0a22d33d78
commit c41bcc6a35
5 changed files with 130 additions and 20 deletions

View File

@ -63,6 +63,19 @@
<version>2.13.4</version> <version>2.13.4</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -2,7 +2,7 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-09-28 15:47:02 * @Date: 2022-09-28 15:47:02
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2022-09-29 00:14:00 * @LastEditTime: 2022-09-30 00:33:41
* @FilePath: \car_dealer\src\main\java\com\cpic\xim\car_dealer\controllers\fileupload\FileUploadController.java * @FilePath: \car_dealer\src\main\java\com\cpic\xim\car_dealer\controllers\fileupload\FileUploadController.java
* @Description: * @Description:
* *
@ -11,6 +11,7 @@
package com.cpic.xim.car_dealer.controllers.fileupload; package com.cpic.xim.car_dealer.controllers.fileupload;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.channels.IllegalSelectorException; import java.nio.channels.IllegalSelectorException;
import javax.servlet.ServletException; import javax.servlet.ServletException;
@ -18,6 +19,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -37,30 +39,64 @@ public class FileUploadController
/***************************************************** /*****************************************************
* @param request * @param request
* @param response * @param response
* @param file * @param uploadFile
* @return FileUploadResult * @return FileUploadResult
*****************************************************/ *****************************************************/
@RequestMapping( path = "/upload" ) @RequestMapping( path = "/upload" )
@ResponseBody @ResponseBody
public FileUploadResult uploadFile( HttpServletRequest request, HttpServletResponse response, @CrossOrigin
MultipartFile file ) throws IllegalSelectorException, IOException public FileUploadResult uploadFile( HttpServletRequest request, MultipartFile uploadFile,
String test ) throws IllegalSelectorException, IOException
{ {
response.setContentType( "text/json;charset=UTF-8" ); // response.setContentType( "text/json;charset=UTF-8" );
// response.setHeader( "Access-Control-Allow-Origin", "*" );
// response.setHeader( "Access-Control-Allow-Methods", "GET,POST" );
FileUploadResult result = new FileUploadResult(); FileUploadResult result = new FileUploadResult();
// PrintWriter writer = response.getWriter(); String sessionID = request.getSession().getId();
// String sessionID = request.getSession().getId();
if ( file == null) if ( uploadFile == null )
{ {
result.setSuccess( false ); result.setSuccess( false );
result.setMessage( "请用于上传文件!" );
return result;
} }
else
if ( uploadFile.isEmpty() )
{ {
result.setSuccess( true ); result.setSuccess( false );
result.setFilePath( file.getOriginalFilename() ); result.setMessage( "上传空文件!" );
return result;
} }
// 使用sessionID来作为存放的目录
String rootPath = request.getServletContext().getRealPath( "/" + sessionID );
String fileName = uploadFile.getOriginalFilename();
File destFile = new File( rootPath, fileName );
// 判断路径是否存在不存在就创建
if ( !destFile.getParentFile().exists() )
{
// 创建路径
if ( !destFile.getParentFile().mkdirs() )
{
// 如果创建路径失败
result.setSuccess( false );
result.setMessage( "创建存放路径失败,请联系开发人员!" );
return result;
}
}
uploadFile.transferTo( destFile );
result.setSuccess( true );
result.setFilePath( destFile.getPath() );
result.setMessage( "上传成功!" );
return result; return result;
} }
} }

View File

@ -2,7 +2,7 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-09-28 23:43:42 * @Date: 2022-09-28 23:43:42
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2022-09-29 00:16:20 * @LastEditTime: 2022-09-29 22:29:13
* @FilePath: \car_dealer\src\main\java\com\cpic\xim\car_dealer\controllers\fileupload\FileUploadResult.java * @FilePath: \car_dealer\src\main\java\com\cpic\xim\car_dealer\controllers\fileupload\FileUploadResult.java
* @Description: * @Description:
* *
@ -24,6 +24,9 @@ public class FileUploadResult
@JsonProperty( "file_path" ) @JsonProperty( "file_path" )
private String filePath; private String filePath;
@JsonProperty( "message" )
private String message;
public FileUploadResult() public FileUploadResult()
{} {}
@ -45,5 +48,15 @@ public class FileUploadResult
public void setFilePath( String filePath ) public void setFilePath( String filePath )
{ {
this.filePath = filePath; this.filePath = filePath;
}; }
public String getMessage()
{
return message;
}
public void setMessage( String message )
{
this.message = message;
}
} }

View File

@ -18,4 +18,9 @@
<property name="suffix" value=".jsp" /> <property name="suffix" value=".jsp" />
</bean> --> </bean> -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- <property name="defaultEncoding" value="UTF-8" /> -->
<property name="maxUploadSize" value="5000000" />
</bean>
</beans> </beans>

View File

@ -2,7 +2,7 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-09-29 16:33:30 * @Date: 2022-09-29 16:33:30
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2022-09-29 16:47:19 * @LastEditTime: 2022-09-30 00:33:12
* @FilePath: \car_dealer\src\main\webapp\file_upload.html * @FilePath: \car_dealer\src\main\webapp\file_upload.html
* @Description: * @Description:
* *
@ -21,28 +21,71 @@
</head> </head>
<body> <body>
<div id="app"> <div id="app">
<form enctype="multipart/form-data"> <form
action="http://localhost:8080/cardealer/upload"
id="uploadform"
enctype="multipart/form-data"
method="post"
>
<input <input
type="file" type="file"
name="upload" name="uploadFile"
id="upload" id="upload"
style="display: none" style="display: none"
onchange="fileUploadChange()" onchange="fileUploadChange()"
/> />
<input
type="text"
value="12345"
name="test"
style="display: none"
/>
</form>
<input <input
type="text" type="text"
id="upload_text" id="upload_text"
readonly readonly
onclick="upload.click()" onclick="upload.click()"
/> />
</form> <button id="btnUpload">上传</button>
<button>上传</button>
</div> </div>
</body> </body>
<script> <script>
const reqeustURL = "http://localhost:8080/cardealer/upload";
const btnUpload = document.getElementById("btnUpload");
function fileUploadChange() { function fileUploadChange() {
document.getElementById("upload_text").value = document.getElementById("upload_text").value =
document.getElementById("upload").value; document.getElementById("upload").value;
} }
btnUpload.onclick = function (event) {
const uploadForm = document.getElementById("uploadform");
const form = new FormData(uploadForm);
//form.append("myfile", file);
const xhr = new XMLHttpRequest();
xhr.upload.onprogress = function (event) {
if (event.lengthComputable) {
let percent = Math.round(
(event.loaded * 100) / event.total,
);
console.log("上传进度:" + percent);
}
};
xhr.onload = function (event) {
//let result = JSON.parse(xhr.responseText);
console.log(xhr.responseText);
//console.log(result);
};
xhr.open("post", reqeustURL, true);
xhr.send(form);
};
</script> </script>
</html> </html>