vue实现文件上传

这里使用的是vue2,ui用的是element ui ,后期有时间会更新vue3版本的。

前端文件上传使用的是ui框架中的Upload的图片列表缩略图,喜欢别的样式可以直接更改。

看图注

fileChange():方法可以直接获取到上传文件的状态及可以直接拿到图片的值可以新建一个数组直接存储即可

因为文件类型都是以FormData类型存储的,就比如你正常的数组类型就应该是Arr类型一样的,将图片存储到FormData中,若你是多个图片上传直接使用forEach即可。

axios的使用这里就不做强调了,直接官网看实例就好了。

因为这个demo使用的是前后端分离的方式,所以我这里用的后端是.net6的这里也顺带讲一下吧

  1. 先创建一个实体存储文件、路径、扩展名

  1. 新建一个逻辑类

 public async Task<string> UplodAsync(UpdoadDto updoad)
        {
            //标记是否有未上传的文件
            int x = 0;
            //存储未成功的文件名
            var fileName = "";
            string[] arr = new string[updoad.file.Count]; 
           //如果当前存储地址不存在则创建
            if (!Directory.Exists(updoad.savePath))
            {
                Directory.CreateDirectory(updoad.savePath);
            }
            //如果没有文件直接返回
            if (updoad.file.Count==0)
            {
                return "请选择需要上传的文件";
            }
            for (int i = 0; i < updoad.file.Count; i++)
            {
                //获取文件扩展名
                var filetype = Path.GetExtension(updoad.file[i].FileName);
                //当前给定的文件扩展名里没有包含上传的文件扩展名
                if (updoad.filetype.IndexOf(filetype.ToLower())<-1)
                {
                    return "未包含该文件类型,请重新上传";
                }
                //判断文件大小
                var length = updoad.file[i].Length;
                if (length > Convert.ToInt64(this.configuration["MaxFileSize"]))
                {
                    arr[i] = updoad.file[i].FileName;
                    continue;
                }
                x++;
                //存储文件Hash名,防止文件重复上传
                var hash = SHA1.Create();
                //读取文件的请求流
                var hashBytes = hash.ComputeHash(updoad.file[i].OpenReadStream());
                var saveName = BitConverter.ToString(hashBytes).Replace("-", "") + filetype;
                FileInfo fileInfo = new FileInfo(updoad.savePath + saveName);
                //若文件不存在则开始创建
                if (!fileInfo.Exists)
                {
                    using FileStream fs = File.Create(updoad.savePath + saveName);
                    updoad.file[i].CopyTo(fs);
                    fs.Flush();
                }
            }
            fileName = string.Join(",", arr); 
                
            if (x != updoad.file.Count)
            {
                fileName = fileName.TrimStart(',');
                fileName = fileName.TrimEnd(',');

                return "文件名为:" + fileName + "超出";
            }
            return "上传成功";
        }

1、我这里选择的是新建一个接口然后依赖注入一下,如果不想太麻烦可以直接new()出来。

注入好以后新建一个API控制代码如下:

[HttpPost]
        public async Task<string> UpdoadAsync([FromForm] UpdoadDto updoad)
        {
            //物理地址,如果拿到源码直接更改成自己电脑的本地路径即可
            updoad.savePath = @"D:\测试上传图片\";
            //可以上传的类型
            updoad.filetype = ".gif|.jpg|.jpeg|.png|.webp";
            return await _uploadFile.UplodAsync(updoad);
        }

这样就完成了一个简单的多文件上传,当然一定要记得配跨域哦!

大神勿喷!!

需要前后端源码的可以直接私信我

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如何实现SpringBoot+Vue文件上传文件上传涉及前端和后端两个方面的实现前端Vue代码: 1. 定义上传文件的模板: ``` <template> <div> <input type="file" @change="handleFileUpload" ref="fileUpload"> <button @click="submitFile">上传文件</button> </div> </template> ``` 2. 在Vue的methods中添加上传文件的方法: ``` methods: { handleFileUpload () { this.file = this.$refs.fileUpload.files[0] }, submitFile () { let formData = new FormData() formData.append('file', this.file) axios.post('/api/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) .then(response => { console.log(response.data) }) } } ``` 这个方法中,我们通过FormData对象来将文件对象上传到服务器端。需要注意的是,在axios请求中,我们需要指定Content-Type为multipart/form-data,以便后端能够正确地解析上传的文件。 后端的SpringBoot代码: 1. 配置文件上传的Multipart配置 在application.properties文件中添加以下配置: ``` spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 这个配置指定了上传文件的大小限制,例如,上限设置为10MB。 2. 添加文件上传的Controller ``` @RestController @RequestMapping("/api") public class FileUploadController { @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { try { // 将上传的文件保存到指定路径下 String filePath = "C:/uploads/" + file.getOriginalFilename(); file.transferTo(new File(filePath)); return "文件上传成功"; } catch (IOException e) { e.printStackTrace(); return "文件上传失败"; } } } ``` 这个Controller中,通过@RequestParam注解来指定上传的文件参数名,再通过MultipartFile来获取上传的文件。最后,将文件保存到指定的路径下。需要注意的是,保存路径需要在业务中合理设置。 至此,SpringBoot+Vue文件上传实现就完成了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱吹空调的小八

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

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

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

打赏作者

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

抵扣说明:

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

余额充值