SpringMVC实现文件上传功能

一、前端文件

1. 上传文件的DOM元素

<a href="javascript:;" class="file glyphicon glyphicon-cloud-upload">上传文件
    <input type="file" id="input" name="input" onchange="upload()" multiple="multiple" />
</a>

2. 执行上传函数

function upload(){
    var files = $("#input").files;
    
    if(files.length<1){
        alert("请至少选择一个文件");
        return;
    }
    
    var index = layer.load(1,{
        shade:[0.75,'#fff']
    });
    
    var formData=new FormData();
    for(var i = 0; i<files.length;i++){
        formData.append("files",files[i]);
    }
    
    formData.append("currentPath",currentPath);
    
    $.ajax({
        type:"post",
        url:"${pageContext.request.contextPath}/file/upload",
        data:formData,
        dataType:"json",
        
        //一下三个参数是向后端传递文件所特有的
        cache:false,
        //这个参数是jQuery特有的,不进行序列化,因为我们不是json格式的字符串,而是要传文件
        processData: false,
        //主义这里一定要设置contentType:false,不然会默认为传的是字符串,这样文件就传不过去了
        contentType:false,
        
        success:function (data){
            if(data.code==200){
                layer.msg(data.msg,{icon:6});
                getFiles(currentPath);
                layer.closeAll("loading");
            }else {
                layer.msg(data.msg,{icon:5})
            }
        }
    })
}

二、后端文件

1. 上传文件业务层

public Result upload(MultipartFile[] files, String currentPath, HttpServletRequest request) {

     String username = ((String) request.getSession().getAttribute("username"));

     if(null!=files && files.length>0){
         String rootPath = "D:\\yunpan2\\file\\"+username+currentPath;
         for(MultipartFile file : files){
             String filename = file.getOriginalFilename();
             File f = new File(rootPath,filename);
             if(!f.exists()){
                 try {
                     file.transferTo(f);
                 } catch (IOException e) {
                     e.printStackTrace();
                     return new Result(100,e.getMessage(),null);
                 }
             }else {
                 return new Result(100,f.getName()+"文件已存在");
             }
         }
     }

     //改变文档大小和存储空间大小
     String path = "D:\\yunpan2\\file\\"+username;
     File file = new File(path);
     request.getSession().setAttribute("count",0);
     countFileSize(file,request);
     int count = (Integer) request.getSession().getAttribute("count");
     String fileSize = FileUtils.getDataSize(count);

     int row = userDao.updateCountSizeByName(fileSize,username);
     if(row!=1){
         return new Result(100,"更新云盘已用大小失败",null);
     }
     return new Result(200,"上传文件成功");
 }

2. 递归计算文件大小

/**
 * 递归计算文件大小
 * @param file
 * @param request
 */
private void countFileSize(File file,HttpServletRequest request) {File[] files = file.listFiles();
    if(null != files && files.length>0){
        for(File f : files){
            if(!f.isDirectory()){
                //文件
                int count = (Integer) request.getSession().getAttribute("count");
                count+=f.length();
                request.getSession().setAttribute("count",count);
            }else {
                //文件夹
                countFileSize(f,request);
            }
        }
    }
}

Tips

“MultipartFile” 通常用于处理文件上传操作。它是在Web开发中用于表示上传的文件数据的一种数据类型或接口。

在Java中,MultipartFile是Spring框架提供的一个接口,用于处理HTTP请求中的文件上传。它是org.springframework.web.multipart.MultipartFile接口的实现类的对象,用于表示上传的文件数据。

通过使用MultipartFile,你可以获取上传文件的相关信息,如文件名、文件大小、文件内容等。你还可以将上传的文件保存到服务器的文件系统中,或进行其他的文件处理操作。

以下是一个使用MultipartFile处理文件上传的示例代码:

import org.springframework.web.multipart.MultipartFile;// 处理文件上传的方法
public void uploadFile(MultipartFile file) {
    if (!file.isEmpty()) {
        String fileName = file.getOriginalFilename();
        long fileSize = file.getSize();
        
        // 将文件保存到服务器的文件系统中
        try {
            file.transferTo(new File("path/to/save/" + fileName));
            System.out.println("File uploaded successfully.");
        } catch (IOException e) {
            System.out.println("Failed to upload file.");
            e.printStackTrace();
        }
    }
}

在上述示例中,MultipartFile对象file表示上传的文件数据。通过调用getOriginalFilename()方法和getSize()方法,可以获取文件的原始文件名和文件大小。然后,可以使用transferTo()方法将文件保存到指定的路径中。

需要注意的是,MultipartFile是Spring框架提供的一种文件上传处理方式,其他的Web框架或编程语言可能会有不同的实现方式。因此,具体的使用方法可能会因框架或语言而异。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值