java从前台到后台上传文件流程,亲测可用

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部分:

<div>

	<input type="file" accept=".ppt, .pptx, .txt" id="myFile">

	<button onclick="upload()">点击上传</button>

</div>

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();
    }
}

当当当!至此解决!

你可能感兴趣的:(linux)