Java文件上传【通用】

导读:本篇文章讲解 Java文件上传【通用】,文章出自:https://blog.csdn.net/weixin_43316702/article/details/111092858希望对大家有帮助,欢迎收藏,转发!站点地址:www.javazhiyin.com.com

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

Java文件上传 主要是针对于网页来说,一般是通过input的file类型上传文件流到后台,再通过后台处理将文件移动到指定位置达到上传的目的。
这里贴代码时,主要是以springboot框架为例,但是是通用的。
1、表单提交上传

<form enctype="multipart/form-data" method="post" action="/upload">
    文件:<input type="file" name="fileUpload"/>
    <input type="submit" value="上传"/>
</form>
@RequestMapping("/upload")
    public String upload(MultipartFile fileUpload) throws IOException{
        //获取文件名
        String fileName = fileUpload.getOriginalFilename();
        //获取文件后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        //重新生成文件名
        fileName = UUID.randomUUID()+suffixName;
        //指定本地文件夹存储图片
        String filePath = "D:/idea/IdeaProjects/springbootdemo/src/main/resources/static/";
        fileUpload.transferTo(new File(filePath+fileName)); 
        return "index";     
    }

提交表单的话会刷新界面,一般不推荐,但这是比较简单的方法,一般推荐使用ajax提交。

2、ajax提交上传(FormData)

<script>
function uploadHead() {
		var formData = new FormData();
		var file = $('#file')[0].files[0];
		formData.append("upload",file);
		$.ajax({
			url:"/uploadHead",
			async:true,
			processData: false,   // jQuery不要去处理发送的数据
			contentType: false,   // jQuery不要去设置Content-Type请求头
			type:"POST",
			data: formData,
			success:function (data) {
				if(data=="1"){
					alert("上传成功");
				}else{
					alert("上传失败");
				}
			},
			error:function () {
				alert("更新失败");
			},
			dataType:"text"
		});
	}
</script>
<input type="file" name="multipartFile" class="fileInput" id="file" >
<input type="button" onclick="uploadHead();">
//我将上传文件做成工具类:
 /**
     * 上传文件
     * @param upload
     * @param path
     * @return
     * @throws IOException
     */
    public String UploadFile(MultipartFile upload,String path) throws IOException {
        //判断该路径是否存在
        File file = new File(path);
        if (!file.exists()) {
            //如果这个文件夹不存在的话,就创建这个文件
            file.mkdirs();
        }
        //获取上传文件名称
        String filename = upload.getOriginalFilename();
        System.out.println(filename);
        //把文件名称设置成唯一值 uuid 以防止文件名相同覆盖
        String uuid = UUID.randomUUID().toString().replace("-", "");
        //新文件名
        filename = uuid + "_" + filename;
        System.out.println(filename);
        //完成文件上传
        upload.transferTo(new File(path, filename));
        String filePath = "upload/" + filename;
        return filePath;
    }

//这里的话是已经将文件上传并即将图片记录在数据库并更换(mybatis)
@RequestMapping("uploadHead")
    public void ReturnHead(HttpServletRequest request, HttpServletResponse response, MultipartFile upload) throws IOException {
        User userSession = (User) request.getSession(true).getAttribute("userSession");
        OperateFile operateFile = new OperateFile();
        if (userSession!=null){
            String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload";
            //System.out.println(path);
            String filePath = operateFile.UploadFile(upload,path);//文件上传成功
            String filename = upload.getOriginalFilename();
            String fileUuid = UUID.randomUUID().toString().replace("-", "");
            Img img = new Img();//进行图片记录
            img.setUuid(fileUuid);
            img.setImg_name(filename);
            img.setImg_type(1);
            img.setImg_path(filePath);
            img.setNote(userSession.getUuid()+"用户上传");
            int c = userService.addImg(img);
            if (c>0){
                User u1 = new User();
                u1.setUuid(userSession.getUuid());
                u1.setImg_uuid(fileUuid);
                int c1 = userService.updateHead(u1);
                if (c1>0){
                    response.getWriter().write("1");
                }else{
                    response.getWriter().write("0");
                }
            }else{
                response.getWriter().write("0");
            }
        }
    }

注意:获取当前项目存储路径的问题

//一般适用,指当前项目下的upload文件夹下
String path = request.getSession().getServletContext().getRealPath("/upload/");

//springboot比较特殊,需要放在static文件夹下路径
String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload";