springboot实现单文件上传和多文件上传(注释详细,最新版本)

关于文件,我一般都是存在oss里面的,因为比赛可能要用到,所以又去学了一下存在服务器里面,关于这里,我是存本地目录的

单文件上传

首先创建一个springBoot项目,这个就不说了
然后创建一个文件上传的html页面

<!DOCTYPE html>
<html  xmlns:th="http://www.thymeleaf.org" >
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>

<form method="post" th:action="@{/file}" enctype="multipart/form-data">
    作者:<input type="text" name="name">
    文件 <input type="file" name="file">
    <input type="submit" name="提交">
</form>
</body>
</html>

这里的表单一定要添加**enctype=“multipart/form-data”**属性,这块不清楚的可以去看一下Html表单
然后是controller层的代码。

  //单文件接口
    @RequestMapping("/file")
    @ResponseBody
    public String file(MultipartFile file,String name){
        System.out.println(name+"上传了");
        return fileService.upload(file);
    }

使用MultipartFile类来处理文件上传
接下来是Servlce层的代码,接口我就不复制了,


@Service
public class FileServiceImpl implements FileService {
    @Override
    public String upload(MultipartFile multipartFile) {
       if(multipartFile.isEmpty()){
           return "上传文件不能为空";
       }
       //写入时可能有异常,
       try{
           //1、设置文件存储位置
           String path="E:\\java\\文件";
           File f=new File(path);
           if(!f.exists()){
               //如果文件路径不存在,则创建
               f.mkdir();
           }
           // 文件写入
           //multipartFile.getOriginalFilename()//获取文件原名称
           //System.currentTimeMillis();//获取当前时间戳
           File dir=new File(path+"\\"+System.currentTimeMillis()+multipartFile.getOriginalFilename());
           multipartFile.transferTo(dir);
           return "文件上传成功";
       }catch (Exception e){
           e.printStackTrace();
           return "文件上传失败";
       }
    }

说一下需要注意的地方,
1、在文件命名时,最后使用当前时间戳,避免文件名重复导致文件被覆盖
2、一定要处理异常,最好是当前自己处理,不要抛出
3、在设置文件储存位置时,在项目开发中,通过配置文件来设置,上面只是学习,为了方便。

多文件上传

还是一样,创建一个Html页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>多文件上传</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" th:action="@{/files}">
    <p>文件1</p> <input type="file" name="file">
    <p>文件2</p><input type="file" name="file">
    <p><input type="submit" value="上传"></p>


</form>

</body>
</html>

这里需要注意的是,多文件上传时,接受文件的input控件名字是一样的,在后台我们接受的是一个文件数组

然后是controller层的代码。

//多文件接口
    @RequestMapping("/files")
    @ResponseBody
    //多文件上传必须加@RequestParm()注解来确定上传的文件数组
    public String files(@RequestParam("file") MultipartFile[] files){
//        System.out.println(files.length);
        System.out.println(files==null);
        return fileService.uploads(files);
    }

需要注意的是 多文件上传必须加@RequestParm()注解来确定上传的文件数组

接下来是Servlce层的代码

@Override
    public String uploads(MultipartFile[] files) {
        //判断文件数组是否为空或者长度为0
        if(files!=null&&files.length>0){
            //设置文件存放路径
            String filepath="E:\\java\\文件\\";
            for(MultipartFile mf :files){
                //获取文件后缀
                //String suffixName = fileName.substring(fileName.lastIndexOf("."));
//                // 重新生成文件名
//                fileName = UUID.randomUUID()+suffixName;

                //获取原文件名称
                String filename=mf.getOriginalFilename();
                if(mf.isEmpty()){
                    //文件是否为空
                    return "文件上传失败,文件为空";
                }
                //创建文件
                File dir=new File(filepath+System.currentTimeMillis()+filename);
                try{
                    //写入文件
                    mf.transferTo(dir);
                    System.out.println("上传成功");
                    return "文件上传成功";
                }catch (IOException e){
                    return "文件失败";
                }

            }
            System.out.println("多文件上传成功");
        }
        return "文件不能为空a";
    }

}

引用提供了一个学习Spring Boot整合CXF实现文件上传的例子,它详细地解释了每个类的注释,可以帮助你理解如何使用Spring Boot搭建CXF文件上传功能。 首先,你需要使用Maven将项目打包成一个可执行的JAR文件。可以通过运行以下命令实现: ``` mvn clean package ``` 然后,将生成的JAR文件上传到服务器上。可以使用以下命令将JAR文件上传到服务器: ``` scp target/springboot-demo-0.0.1-SNAPSHOT.jar user@server:/path/to/destination ``` 接下来,需要编写一个Dockerfile来构建Docker镜像。可以使用以下内容编写Dockerfile: ```Dockerfile FROM openjdk:8-jre-alpine COPY springboot-demo-0.0.1-SNAPSHOT.jar /springboot-demo.jar ENTRYPOINT ["java", "-jar", "/springboot-demo.jar"] ``` 使用以下命令基于Dockerfile创建一个镜像: ``` docker build -t springboot-demo-image . ``` 最后,可以使用以下命令查看是否成功创建了镜像: ``` docker images ``` 这样,你就可以使用Spring Boot搭建CXF文件上传功能了。请根据你的需求进一步配置和调整代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot整合CXF发布webservice和客户端调用](https://download.csdn.net/download/maple_fix/10339294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Kubernetes(k8s)实战:Kubernetes(k8s)部署Springboot项目](https://blog.csdn.net/A_art_xiang/article/details/131552158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值