springboot+vue+mysql实现前端上传图片到本地并将url存入本地数据库

因为第一次写,查看了一些网上的资料,但大部分给的代码有些少,导致不能很好的使用,所以自己研究以后,决定也写一篇关于上传图片的文章,希望可以帮助到大家。

废话不多说,先看下面的效果图⬇

1、先来看一下效果图:
数据库:

在这里插入图片描述
前端界面:

上传前样式:
在这里插入图片描述

上传后样式:
在这里插入图片描述
本地效果:
在这里插入图片描述

以上就是这个功能实现后的代码图,下面我们来看一下具体应该如何实现,这里将包括前端、后端、数据库类型的所有说明,内容非常详细。

一、数据库

我这里是将数据库单独建立了一个表,字段只有三个,分别是主键、url、图片名称。
在这里插入图片描述
这里没什么可说的,具体想要几个字段,看个人需要,我这里只列举两个。

二、前端代码

<el-upload class="avatar-uploader" action="#" 
:show-file-list="false"
:on-success="handleAvatarSuccess" 
:before-upload="beforeAvatarUpload">
<img v-if="imageUrl" :src="imageUrl" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"/>
</el-upload>

:on-success:文件上传成功时的钩子。
:before-upload:上传文件之前的钩子,参数为上传的文件。
:show-file-list:是否显示已上传文件列表。
action:上传的地址(实际这里应该写后端的接口),我这里用#替代一下。

具体说明请参考官方网站upload讲解的官方网址

js部分代码:

:before-upload的方法

beforeAvatarUpload(file) {
				const isJPG = file.type === 'image/jpeg';
				const isLt2M = file.size / 1024 / 1024 < 2;

				if (!isJPG) {
					this.$message.error('上传头像图片只能是 JPG 格式!');
				}
				if (!isLt2M) {
					this.$message.error('上传头像图片大小不能超过 2MB!');
				}
				return isJPG && isLt2M;

			},

:on-success的方法:

			// 文件上传成功时的钩子
			handleAvatarSuccess(res, file){
				this.imageUrl = URL.createObjectURL(file.raw);
				console.log(file)
			},

以上就是前端的代码部分。

三、后端代码(java)

实体类:

 	private String picturename;
    private String pictureurl;

    public String getPicturename() {
        return picturename;
    }

    public void setPicturename(String picturename) {
        this.picturename = picturename;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public String getPictureurl() {
        return pictureurl;
    }

    public void setPictureurl(String pictureurl) {
        this.pictureurl = pictureurl;
    }

yml配置文件:
在这里插入图片描述

Controller层:

@RestController
@RequestMapping("路径")
public class ImageurlController {
    @Value("${file.upload-path}")
    private String pictureurl;

//    注入业务逻辑层
    @Autowired
    ServiceImpl Service;
//    单文件上传
    @PostMapping("路径")
    public void upload(MultipartFile file) {
        String fileName = file.getOriginalFilename();
        File saveFile = new File(pictureurl);
        if (!saveFile.exists()) {
            //若不存在该目录,则创建目录
            saveFile.mkdir();
        }
        //new一个实体类
        Imageurl imageurl = new Imageurl();
        //拼接url,采用随机数,保证每个图片的url不同
        UUID uuid = UUID.randomUUID();
        //拼接后的url
        String url = file.getOriginalFilename().replace(".","")+uuid;
        //图片名称
        String name =file.getOriginalFilename();
        //将url和name 分别set
        imageurl.setPictureurl(url);
        imageurl.setPicturename(name);
        //存入数据库,这里可以加if判断
        service.save(imageurl)
        try {
            //将文件保存指定目录
            file.transferTo(new File(pictureurl + fileName));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

返回数据:
前端应该返回的数据
在这里插入图片描述

以上就是上传图片的所有有效步骤,如果有疑问,可以私信或者在文章下面留言。

最后,希望本篇文章可以为大家带来帮助,感谢支持,点个关注吧。

  • 21
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
实现前端上传文件到本地并将url存入本地数据库,需要前后端协同完成以下几个步骤: 1. 前端使用 Vue.js 实现文件上传,并将文件传递给后端。 2. 后端使用 Spring Boot 接收前端传递的文件,并将文件保存到本地。 3. 后端生成本地文件的URL,将URL保存数据库中。 4. 前端数据库中获取URL,展示文件信息。 以下是具体实现步骤: 1. 前端实现文件上传,使用 Vue.js 和 Axios 实现,代码如下: ```html <template> <div> <input type="file" @change="onFileChange"> <button @click="uploadFile">上传</button> </div> </template> <script> import axios from 'axios'; export default { data() { return { file: null }; }, methods: { onFileChange(event) { this.file = event.target.files[0]; }, uploadFile() { const formData = new FormData(); formData.append('file', this.file); axios.post('/api/upload', formData).then(response => { console.log(response.data); }).catch(error => { console.log(error); }); } } }; </script> ``` 2. 后端使用 Spring Boot 接收前端传递的文件,并将文件保存到本地。代码如下: ```java @RestController @RequestMapping("/api") public class FileController { @Value("${file.upload-dir}") private String uploadDir; @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { String filename = file.getOriginalFilename(); Path path = Paths.get(uploadDir, filename); Files.write(path, file.getBytes()); return "上传成功"; } } ``` 在 Spring Boot 中,使用 `@Value` 注解获取配置文件中的变量值,即上传文件存储的路径。 3. 后端生成本地文件的URL,将URL保存数据库中。代码如下: ```java @RestController @RequestMapping("/api") public class FileController { @Autowired private FileRepository fileRepository; @Value("${file.base-url}") private String baseUrl; @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { String filename = file.getOriginalFilename(); Path path = Paths.get(uploadDir, filename); Files.write(path, file.getBytes()); String url = baseUrl + filename; fileRepository.save(new FileEntity(filename, url)); return "上传成功"; } } ``` 在 Spring Boot 中,使用 `@Value` 注解获取配置文件中的变量值,即本地文件的URL前缀。 4. 前端数据库中获取URL,展示文件信息。代码如下: ```html <template> <div> <div v-for="file in files" :key="file.id"> <a :href="file.url">{{ file.name }}</a> </div> </div> </template> <script> import axios from 'axios'; export default { data() { return { files: [] }; }, mounted() { axios.get('/api/files').then(response => { this.files = response.data; }).catch(error => { console.log(error); }); } }; </script> ``` 在 Vue.js 中,使用 `axios` 发送请求获取文件信息,展示文件的名称和URL。需要注意的是,文件的URL需要使用 `<a>` 标签展示,并且需要设置 `href` 属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜程序

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值