• SpringMVC 文件上传


    客户端文件上传要求:

    1,表单提交方式为post提交

    2,提供文件上传组件,

    3,表单的entype属于必须属于multipart/form-data,如果没有这个属性值的话,文件内容是提交不到服务器的。

    服务器端要求:

    1,获取到客户端上传的文件

    2,准备一个目录存储客户端上传的文件

    3,将上传的文件写入到目录中


    SpringMVC封装了commons-fileupload,所以我们还需要添加commons-fileupload的依赖

    1. <dependency>
    2. <groupId>commons-fileuploadgroupId>
    3. <artifactId>commons-fileuploadartifactId>
    4. <version>1.4version>
    5. dependency>

    在Spring.xml文件中配置文件解析器

    1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    2. <property name="maxUploadSize" value="5242880">property>
    3. bean>

    简单案例

    客户端

    1. <html>
    2. <head>
    3. <title>Titletitle>
    4. head>
    5. <body>
    6. <form action="/file/upload" method="post" enctype="multipart/form-data">
    7. <input type="file" name="logo">
    8. <input type="submit" value="提交上传">
    9. form>
    10. body>
    11. html>
    1. @RestController
    2. @RequestMapping("file")
    3. public class FlieUploadController {
    4. /**
    5. * 1,获取客户端上传的文件的信息
    6. * 2,获取客户端上传的文件,存放到文件夹中,通过输出流存储到文件夹中
    7. *
    8. * 注意:!!!参数中MultipartFile的名字必须与客户端一致
    9. */
    10. @PostMapping("upload")
    11. public void upload( MultipartFile logo, HttpServletRequest httpServletRequest){
    12. //1,获取项目在编译后,存储文件夹的真实路径
    13. //优化目录
    14. Calendar instance = Calendar.getInstance();
    15. //日期做目录
    16. String dirDate = instance.get(Calendar.YEAR)+"/"+instance.get(Calendar.MONTH)+"/"+instance.get(Calendar.DATE);
    17. String realPath = httpServletRequest.getSession().getServletContext().getRealPath("file/"+dirDate);
    18. File file = new File(realPath);
    19. //判断file文件夹是否真实存在
    20. if(!file.exists()){
    21. //不存在
    22. //创建文件夹
    23. file.mkdirs();
    24. }
    25. //获取客户端上传的文件名
    26. String originalFilename = logo.getOriginalFilename();
    27. //获取后缀
    28. int i = originalFilename.lastIndexOf(".");
    29. String suffix = originalFilename.substring(i);
    30. //文件名用uuid代替文件名
    31. String filename = UUID.randomUUID()+suffix;
    32. try {
    33. //将客户端的文件写入到文件夹中
    34. logo.transferTo(new File(file,filename));
    35. } catch (IOException e) {
    36. e.printStackTrace();
    37. }
    38. }
    39. }

    FastDFS+Nginx搭建Java分布式文件系统-爱码网

    简单的远程上传文件的案例

    用tomcat做文件服务器,首先需要配置web.xml

    tomcat默认不是允许其他服务器往自身写入数据的,需要在tomcat配置文件conf/web.xml的servlet标签下加上如下代码

    1. <init-param>
    2. <param-name>readonlyparam-name>
    3. <param-value>falseparam-value>
    4. init-param>

     然后上传文件的服务端添加以下依赖

    1. <dependency>
    2. <groupId>com.sun.jerseygroupId>
    3. <artifactId>jersey-coreartifactId>
    4. <version>1.18.1version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.sun.jerseygroupId>
    8. <artifactId>jersey-clientartifactId>
    9. <version>1.18.1version>
    10. dependency>

    然后案例代码如下:

    1. @PostMapping("upload2")
    2. public void upload2(MultipartFile logo){
    3. //获取客户端上传的文件名
    4. String originalFilename = logo.getOriginalFilename();
    5. //获取后缀
    6. int i = originalFilename.lastIndexOf(".");
    7. String suffix = originalFilename.substring(i);
    8. //文件名用uuid代替文件名
    9. String filename = UUID.randomUUID()+suffix;
    10. //使用跨服务文件上传方式,将客户端文件上传到文件服务器中
    11. Client client = Client.create();
    12. //连接文件服务器路径
    13. WebResource resource = client.resource("http://localhost:8080/file/"+filename);
    14. try {
    15. resource.put(logo.getBytes());
    16. } catch (IOException e) {
    17. e.printStackTrace();
    18. }
    19. }

  • 相关阅读:
    计算机考研操作系统题库
    力扣刷题详解(含代码动态展示)
    Linux内存地址映射-8086分段分页与缺页异常
    C#教程14:命名空间
    JavaSE、JavaEE与Spring的概念和异同点剖析以及规范13 个分析
    记录我常用的免费API接口
    解析全闪对象存储
    得物极光蓝纸箱尺寸设计实践
    2023 年全国大学生数学建模A题目-定日镜场的优化设计
    Cassandra 安装部署
  • 原文地址:https://blog.csdn.net/qq_42572322/article/details/125989547