问题?

文件有大有小,这就有了带宽的问题
解决方法: 使用单独的模块(这是vue)

使用技术?

springboot+vue完成最基本的文件上传

1、vue

在上传的点击按钮中把input标签的type设置为file,使它变成一个文件组件

springboot向vue文件跳转 springboot vue文件上传_springboot向vue文件跳转


特点:文件组件没有数据绑定,否则页面会报错

springboot向vue文件跳转 springboot vue文件上传_springboot_02

vue中把文件传到后端去?

怎么触发这个动作(传到后端的这个动作)

springboot向vue文件跳转 springboot vue文件上传_input标签_03


方法一

增加按钮

方法二

直接在这个控件上增加一个事件监听;当这个控件的值发生变化的时候,就去触发上传的动作

在vue中的input标签中增加一个change

springboot向vue文件跳转 springboot vue文件上传_上传_04


这个change的值时一个方法;然后在这个方法里做具体的跟后端的交互

springboot向vue文件跳转 springboot vue文件上传_springboot_05


首先要定义一个FormData,使用表单的方式来提交图片

springboot向vue文件跳转 springboot vue文件上传_vue_06


往FormData里方图片

springboot向vue文件跳转 springboot vue文件上传_input标签_07


在input标签中增加一个id,值为file-upload-input(也就是上面的往FormData里传图片中的值)

springboot向vue文件跳转 springboot vue文件上传_vue_08


springboot向vue文件跳转 springboot vue文件上传_springboot_09


以上步骤做完之后就拿到了图片

接着就把这张表单提交到后端

springboot向vue文件跳转 springboot vue文件上传_上传_10


后端预留了以下的一个请求

springboot向vue文件跳转 springboot vue文件上传_springboot向vue文件跳转_11


还增加了show和hide的等待宽

springboot向vue文件跳转 springboot vue文件上传_上传_12


最后拿到了结果

springboot向vue文件跳转 springboot vue文件上传_上传_13

后端

新建一个Controller

springboot向vue文件跳转 springboot vue文件上传_上传_14


接下来写upload方法

用@RequestParam来接收file变量

springboot向vue文件跳转 springboot vue文件上传_springboot向vue文件跳转_15


因为我们的文件是一个富文本,也就是图片;所以我们要用MultiparFile

springboot向vue文件跳转 springboot vue文件上传_springboot_16


返回值用ResponseDto

springboot向vue文件跳转 springboot vue文件上传_input标签_17

保存文件

保存文件用以下代码

出现异常要抛出去

springboot向vue文件跳转 springboot vue文件上传_springboot向vue文件跳转_18


接收传过来的文件FileName

springboot向vue文件跳转 springboot vue文件上传_vue_19


并且生成一个8位的uuid(短id)

目的:防止同一张图片传多次,出现错误,加了uuid,这样就可传多个一样的图片

springboot向vue文件跳转 springboot vue文件上传_input标签_20


然后定义一个本地的路径

springboot向vue文件跳转 springboot vue文件上传_上传_21


注释:如果不加短id,上传的文件名极可能重复,文件就会互相覆盖;

注意:文件名一样不代表文件就是一样的,因为有短id接着用java自带的File生成一个目标位置dest

springboot向vue文件跳转 springboot vue文件上传_input标签_22


然后把vue传过来的file写到目标位置

springboot向vue文件跳转 springboot vue文件上传_input标签_23