当前位置: 首页 > article >正文

JavaWeb:文件上传1

欢迎来到“雪碧聊技术”CSDN博客!

在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。

让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在“雪碧聊技术”与您共同成长!

目录

一、简介

1、什么是文件上传?

2、文件上传需要的两部分

①前端程序

②后端程序

3、举例

4、总结

二、本地存储

1、什么是本地存储?

2、初步代码

3、思考此时存在的问题

①不能以文件原始名称的形式存储

4、使用UUID来保证文件不被覆盖(唯一性)

①什么是UUID?

②截取原始文件名的后缀,并拼接上UUID,构成新文件名(唯一的)

③测试效果

5、目前仍存在的问题

①上传文件的大小有限制

②问题的原因

③配置好以后,再次上传那个2.84MB的图片,看看能否成功

6、MultipartFile的方法

7、本地存储文件的缺点

结语


一、简介

1、什么是文件上传?

        文件上传:是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。

        举例:发微博、微信朋友圈都需要用到文件上传功能。

2、文件上传需要的两部分

①前端程序

三要素:

  • 必须有一个类型为file的输入框
  • form表单的提交方式必须是post
  • 在form表单中,需要使enctype这个属性为multipart/form-data

②后端程序

使用spring提供的MultipartFile来接收传递过来的文件。

举例:

3、举例

编写后端接收文件的controller

然后查看后端断点的信息:

将三个文件,改名为1.txt,2.txt,3.txt,然后查看文件内容。

然后放行断点:

由上面的过程可见,后端接收前端传递的文件时,会在Tomcat服务器生成对应的临时文件,我们接下来要做的就是将这些临时文件保存下来。可以选择保存到本地,也可以选择保存到阿里云OSS服务器。

4、总结

二、本地存储

1、什么是本地存储?

在服务端(后端),接收到上传的文件后,将文件存储在本地服务器磁盘中。

2、初步代码

@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public ResultVo upload(String username, Integer age, MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}", username, age, image);
        //获取原始文件名(通过getOriginalFilename方法)
        String originalFilename = image.getOriginalFilename();//如:1.png   hello.txt
        //将文件存储在后端的磁盘目录中(通过transferTo方法)
        image.transferTo(new File("D:\\code\\yyzxproject\\src\\main\\resources\\static\\files\\"+originalFilename));
        return new ResultVo("200","上传成功");
    }
}

测试效果:

利用postman,向后端传入一张图片:

3、思考此时存在的问题

①不能以文件原始名称的形式存储

举例:

我们第一次上传了一个张三的自拍,照片名称为01.jpg, 第二次又上传了一个李四的自拍,照片名称也叫01.jpg。 此时李四的自拍就会覆盖张三的自拍,这就导致少了一张照片。

产生上述图片覆盖的问题,根本原因就是文件名重复了。

因此我们存储文件时,要保证文件名的唯一性。

4、使用UUID来保证文件不被覆盖(唯一性)

①什么是UUID?

UUID也称为“通用唯一识别码”,就是一个长度固定(36位)、唯一的字符串。

UUID是Java官方提供的,安装了JDK就可以使用该包。

举例:

public class Test6 {
    public static void main(String[] args) {
        String uuid = UUID.randomUUID().toString();
        System.out.println(uuid);
    }
}

运行结果:

②截取原始文件名的后缀,并拼接上UUID,构成新文件名(唯一的)

如:01.jpg的后缀是.jpg

@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public ResultVo upload(String username, Integer age, MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}", username, age, image);
        //获取原始文件名(通过getOriginalFilename方法)
        String originalFilename = image.getOriginalFilename();//如:1.png   hello.txt
        //构造唯一的文件名
        int index = originalFilename.lastIndexOf(".");//.出现的下标
        String extname = originalFilename.substring(index);//从.的下标,截取到最后,结果就是后缀名。如.jpg
        String newFileName = UUID.randomUUID().toString() + extname;
        //将文件存储在后端的磁盘目录中(通过transferTo方法)
        image.transferTo(new File("D:\\code\\yyzxproject\\src\\main\\resources\\static\\files\\"+newFileName));
        return new ResultVo("200","上传成功");
    }
}

也就是说,文件名是UUID,后缀还是原来的后缀。

③测试效果

5、目前仍存在的问题

①上传文件的大小有限制

我们把这个图片上传到后端,查看效果:

②问题的原因

Spring限制每次上传的单个文件大小不能超过1MB。

如果想超过,需要自己进行配置:

举例:

③配置好以后,再次上传那个2.84MB的图片,看看能否成功

6、MultipartFile的方法

7、本地存储文件的缺点

  • 前端页面无法直接访问后端的文件

        举例:

  • 服务器(后端)磁盘的容量有限,满了的时候,扩容很不方便
  • 服务器(后端)磁盘一旦损坏,存储的所有文件资源就会全部丢失

结语

以上就是本地存储文件的全部内容,但这种存储方式的确不常用,我们学习本篇文章,是为了解MultipartFile对象以及本地存储方式的缺点。

想了解阿里云存储文件,请关注本博主本专栏[JavaWeb]的下篇文章~~


http://www.kler.cn/a/388536.html

相关文章:

  • 探索 JNI - Rust 与 Java 互调实战
  • 什么是两化融合
  • 修改Mysql 8 的密码
  • ReactPress:构建高效、灵活、可扩展的开源发布平台
  • 3.2 软件需求:面对过程分析模型
  • MarsCode算法题之二叉树供暖问题
  • (Go基础)变量与常量?字面量与变量的较量!
  • 微信小程序官方评价组件wxacommentplugin下线后如何巧妙调用
  • 【网络原理】关于HTTP状态码以及请求的构造的哪些事
  • 扁平化在APP设计领域成了过眼云烟,3D拟物化又开始回归了。
  • WPF中的依赖属性
  • 「QT」几何数据类 之 QSizeF 浮点型尺寸类
  • 14、NAT和桥接区别
  • STM32F405RGT6单片机原理图、PCB免费分享
  • 智慧城市路面垃圾识别系统产品介绍方案
  • 学习记录:js算法(九十):N皇后
  • Spring Boot 的核心注解
  • SH3001六轴 学习1
  • 【Vue】-组件开发
  • 【Vue】Vue3.0(十八)Vue 3.0中‘props‘一种使用频率最高的通信方式(全面解析)
  • MML 中使用 libevent +std::async unix socket domain 进程间通信
  • RT-Thread 配置工具
  • 英国留学论文写作中复合句式基础知识讲解
  • 算法复杂度
  • 【SpringMVC】记录一次Bug——mvc:resources设置静态资源不过滤导致WEB-INF下的资源无法访问
  • W3C HTML 活动