Java文件上传【通用】

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提交。

<div class="layui-card">
    <div class="layui-card-body">
        <form class="layui-form" lay-filter="form" name="mainForm" ENCTYPE='multipart/form-data' method="POST" οnsubmit="return false;">
        <table class="layui-table layui-form" lay-skin="">
            <tbody>
            <tr>
                <td width="40%" style="text-align: center"><font color="#f25140">*</font>请选择上传的文件</td>
                <td width="60%" ><input type="file" name="fileUpload" id="fileUpload" size="51" class="input-long" οnpaste="return false" οnkeydοwn="return false"></td>
            </tr>
            </tbody>
        </table>
        </form>
    </div>
</div>

<div class="layui-form-item">
    <div class="layui-input-inline" style="float:right; width:auto; margin:0;">
            <button class="layui-btn" lay-submit="" lay-filter="saveBtn">保存</button>
            <button class="layui-btn" οnclick="closeW();">取消</button>
    </div>
</div>
layui.use(['layer','jquery','form'], function () {
   var $ = layui.$,
      form = layui.form,
      table = layui.table;

    //保存文件
    form.on('submit(saveBtn)', function (data) {
        var form=document.all.mainForm;
        if(form.fileUpload.value==""){
            layer.msg('请选择上传文件!', {icon: 0});
            return false;
        }
        form.action=appName + "/minIOExtend/upload.do;
        form.submit(
            window.parent.$("#search").click()
        );
        var index = parent.layer.getFrameIndex(window.name); //获取当前窗口的name
        parent.layer.close(index);
        layerCommonUtil.success("操作成功");
    });
});

后端

@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";     
    }

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" οnclick="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";

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值