java从前端到后端上传大文件流程,亲测可用
1、前期准备
java框架:servelet原生框架或者spring boot框架,其他框架我没测,不知道效果,但应该都可以。此文以spring boot为例。其运行在tomcat下。
前端:普普通通html+jquery即可
服务器:上传的目标文件夹必须具有可读可写权限
2、开始干活——首先我们解决后端的问题
为了简便,我把所有代码都写到一个文件里面了,都在controller里面,具体看代码:
@RequestMapping("/uploadFile")
public int uploadFile(@RequestParam("uploadFile") MultipartFile file){
//1、判断文件是否为空
if(file.isEmpty()){
return null;
}
//2、存储的时候添上时间,防止文件名重复
Date date = new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyyMMddhhmmss");
String fileName = dateFormat.format(date) + "_" + file.getOriginalFilename();
//文件实际存储地址,以linux系统为标杆
String filePath = "/javaweb/tomcat/apache-tomcat-8.5.41/webapps/resources/";
//可供下载的链接地址,将ip替换为你自己的ip即可,resources文件夹的位置很重要,不同的位置,可供下载的链接地址也就不一样。,可参考文件实际存储地址来设。
String fileLink = "http://0.0.0.0:8080/resources/" + fileName;
File dest = new File(filePath + fileName);
try {
file.transferTo(dest);
}catch (IOException e){
e.printStackTrace();
return "500";
}
return "200"
}
3、然后我们解决前端问题
html我们采用input标签,指定file类型来浏览上传文件,通过accept属性来限制上传的文件类型。
html部分:
点击上传
javascript最重要的就是采用了FormData()来作为承载数据的小船,带我们穿越茫茫大海通向远方的港口。
对应的javascript部分:
function upload() {
var formData = new FormData();
formData.append("uploadFile",$("#myFile")[0].files[0]);
//还可以按照如下方式添加其他数据
//formData.append("projectID",projectID);
//formData.append("reportType",type);
$.ajax({
type:"post",
url:"此处填写刚才controller的请求地址",
data:formData,
dataType:"json",
async:false,
processData : false, // 使数据不做处理
contentType : false, // 不要设置Content-Type请求头
success:function(data){
// 成功拿到结果放到这个函数 data就是拿到的结果
console.log(data);
if(data == "200"){
alert("上传报告成功!");
}else{
alert("上传失败");
}
},
})
}
4、解决文件上传大小限制
此时,恭喜你,你已经可以上传文件啦!但很遗憾的是,此时的上传文件是有大小限制的,超过1MB还是2MB的时候就上传失败,为什么呢?是因为spring还是tomcat做了文件限制(其实我忘了,但反正就是他俩其中一个),我们想完成大文件的上传,就必须更改下配置。下面,跟我来一起翻越这座高山。
(1)首先我们更改配置文件——application.properties
在配置文件下,添加如下语句:
#配置文件传输
spring.servlet.multipart.enabled =true
spring.servlet.multipart.file-size-threshold =0
#单个数据的大小
multipart.max-file-size = 100Mb
#总数据的大小
multipart.max-request-size=100Mb
(2)然后我们更改spring boot启动类
什么?你不知道启动类是哪个?那我可帮不了你了,多看看spring boot基础吧。
废话不多少,直接上代码。
首先,我们给启动类添加一个注解@Configuration
然后,在启动类里面添加一个@Bean方法,配置上传文件大小
代码如下:
@Configuration
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
/**
* 配置上传文件大小的配置
* @return
*/
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个数据大小
factory.setMaxFileSize("100MB");
/// 总上传数据大小
factory.setMaxRequestSize("100MB");
return factory.createMultipartConfig();
}
}
当当当!至此解决!