# SpringBoot+Vue自定义文件名 上传

SpringBoot+Vue自定义文件名并上传

由于文件或图片上传时,文件名不是自己想要的,这时候就需要在前端修改好文件名再上传,这样可以避免重名的情况发生.

前端

直接上代码

  1. <el-upload
               class="upload-demo"
               name="file"
               action="http://localhost:8080/person/upload"
               :on-success="handleSuccess"
               :on-error="handleError"
               :on-progress="handleProgress"
               :before-upload="beforeUpload"
               list-type="picture">
        <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
    </el-upload>
    
  2. action就是后端接收文件的接口,改成自己的就可以

  3. 文件改名

  4. <script>
        export default{
            beforeUpload(file) {
                console.log('file')
                const timeStamp = new Date() - 0
                console.log([file])
                console.log(file)
                //这里的第二个参数就是自己要改的名字,这里是以用户的名字命名的,也可以用随机数或者时间戳来命名
                const copyFile = new File([file], `${this.dataForm.username}`)
                this.uploadFile(copyFile)
                return false
            },
            uploadFile(file) {
                const formdata = new FormData()
                formdata.append('lbf-file-upload', file)
                //提交的属性名是 lbf-file-upload,后端接收时一定要按照这个参数来接收
                formdata.append('name', 'lbf-file-upload')
                this.postForm(formdata)
            },
            postForm(formdata) {
                axios.post(`http://localhost:8080/person/upload`, formdata).then(({data}) => {
                    console.log(data)
                    if (data.code === '200') {
                        // do something
                        this.$message.success(data.msg)
                    } else {
                        this.$message.error(data.msg || data.msg || '文件上传失败')
                    }
                }).catch((err) => {
                    this.$message.error(err.msg || '文件上传失败')
                })
            },
        }
    </script>
    
  5. 默认是选择完文件后就自动上传,如果不想自动上传,可以吧:auto-upload="false",然后添加一个确定上传的按钮,<el-button @click='submitUpload'>确定上传</el-button>,submitUpload()方法this.$refs.upload.submit()

  6. <el-upload
               class="upload-demo"
               name="file"
               action="http://localhost:8080/person/upload"
               :on-success="handleSuccess"
               :on-error="handleError"
               :on-progress="handleProgress"
               :auto-upload="false"`
               :before-upload="beforeUpload"
               list-type="picture">
        <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
        <el-button @click='submitUpload'>确定上传</el-button>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
    </el-upload>
    <script>
      export default {
        data() {
          return {}
          
        },
        methods: {
          submitUpload() {
             //提交
            this.$refs.upload.submit();
          },
        }
      }
    </script>
    

前端完成,开始搞后端

SpringBoot后端

  1. @Service
    public class PersonService{
        /**
         * 上传
         *
         * @param multipartFile multipart
         * @return object
         */
        public Object upload(@NotNull MultipartFile multipartFile) {
            InputStream inputStream = null;
            BufferedOutputStream bos = null;
            try {
                //这里的文件名就是前端自定义的用户名
                final String name = multipartFile.getOriginalFilename();
                log.info("fileName = " + name);
    
                inputStream = multipartFile.getInputStream();
                
                //保存到指定地址
                bos = new BufferedOutputStream(new FileOutputStream("D:\\Code\\clone\\低代码平台\\healthcode\\qrCode\\" + name + ".jpg"));
                byte[] bytes = new byte[1024];
                int len;
                while ((len = inputStream.read(bytes)) != -1) {
                    bos.write(bytes, 0, len);
                }
    
                File file = new File("D:\\Code\\clone\\低代码平台\\healthcode\\qrCode\\" + name + ".jpg");
                //获取文件的绝对路径
                final String absolutePath = file.getAbsolutePath();
                log.debug("图片绝对路径 = " + absolutePath);
               
                return "图片上传完成";
            } catch (IOException e) {
                log.error(e.getMessage());
                return "上传失败 " + e.getMessage();
            } finally {
                try {
                    assert bos != null;
                    bos.close();
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    
    
    @RestController
    public class PersonController{
        
        @Resource
        private PersonService personService;
        
    @RequestMapping("/upload")
        //@RequestParam("lbf-file-upload") 请求参数,务必和前端传过来的请求参数名一致
        public Object upload(@RequestParam("lbf-file-upload") MultipartFile multipartFile) {
            log.info("文件上传");
            if (ObjectUtil.isNotNull(multipartFile)) {
                final Object upload = personService.upload(multipartFile);
                return new Result("200", (String) upload, upload);
            }
            return new Result().err("4444", "文件不能为空", null);
        }
    
    }
    
  2. 这样就上传完成啦

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源名字:基于Springboot+vue+mysql的java学习平台设计与实现(源码+设计文档+部署说明+视频演示).zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 基于Spring Boot+Vue+MySQL的Java学习平台是一个面向学习者的在线学习平台,旨在提供丰富的Java学习资源和交互式学习环境,具有以下主要特点: 技术栈:该学习平台采用了Spring Boot作为后端框架,Vue作为前端框架,MySQL作为数据存储,具备良好的技术稳定性和易用性。 课程资源:平台提供丰富的Java学习课程资源,包括基础知识、编程语言特性、面向对象编程、数据结构与算法等,帮助学习者系统地学习和掌握Java编程。 系统的主要功能包括首页,个人中心,学生管理,教师管理,课程信息管理,类型管理,作业信息管理,资料信息管理,签到信息管理,成绩统计管理,学生作业管理,试卷管理,试题管理,校园论坛,系统管理等功能。 管理员可以根据系统给定的账号进行登录,登录后可以进入学习平台,对学习平台所有模块进行管理。包括查看和修改自己的个人信息以及登录密码。 用户界面友好:平台具有直观清晰的用户界面和良好的用户体验,方便学习者进行学习内容的浏览、搜索和学习进度的管理。 总之,基于Spring Boot+Vue+MySQL的Java学习平台提供了全面的Java学习资源和交互式学习环境,帮助学习者系统学习Java编程知识,提升编程能力,并通过个性化学习计划和学习社群建设提供个性化和互动性学习体验。
<h3>回答1:</h3><br/>如何实现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(&#39;file&#39;, this.file) axios.post(&#39;/api/upload&#39;, formData, { headers: { &#39;Content-Type&#39;: &#39;multipart/form-data&#39; } }) .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文件上的实现就完成了。 <h3>回答2:</h3><br/>Spring Boot是一个广受欢迎的Java开发框架,Vue是一款流行的前端开发框架,他们之间的结合可以为用户提供高效、易用的Web应用程序。在其中,文件上是Web应用程序的必备功能之一。Spring Boot和Vue的结合可使文件上实现更加轻松快捷。 首先,需要在前端部分使用Vue来创建一个简单的文件上组件,该组件可以实现文件选择、文件上以及进度条的显示等功能。可以使用vue-file-upload或者其他类似的第三方库来实现文件上功能,同时需要在该组件中设置上API的路径和上文件名。 然后,需要在后端部分使用Spring Boot来处理上的文件。Spring Boot提供了丰富的文件处理工具和API,可以轻松地实现文件上。可以使用Spring Boot的MultipartResolver来解析文件上请求,同时可以使用MultipartFile类来获取上的文件对象。 接着,需要在Spring Boot的Controller中创建一个上接口用于处理文件上请求。该接口需要使用@RequestParam注解来获取上的文件对象,并使用MultipartFile类来处理文件上。同时,还需要设置上文件的路径,并将上成功后的文件路径返回到前端。 最后,需要在前端页面使用Vue来处理上结果。根据上返回的结果,可以在页面上显示上成功或者上失败的提示信息。同时,还可以使用Vue实现进度条的动态更新,用以提醒用户当前的上状态。 总的来说,Spring Boot和Vue的结合可以实现快速、高效的文件上功能。借助两个框架提供的强大工具和API,开发者可以轻松地实现文件上功能,提高Web应用程序的可靠性和用户体验。 <h3>回答3:</h3><br/>SpringBoot是一个基于Spring框架的快速开发微服务的工具,它简化了Spring框架的配置,使开发者可以快速上手。Vue是一款流行的前端框架,它具有高效的组件化开发和数据双向绑定等优点。在实现文件上功能时,可以结合使用SpringBootVue来实现。 首先,需要在SpringBoot的依赖管理文件pom.xml中添加对spring-boot-starter-web和spring-boot-starter-test的引用: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> ``` 然后,在SpringBoot的配置文件application.properties中添加文件上的配置: ``` spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=200MB spring.servlet.multipart.max-request-size=215MB ``` 接下来,在SpringBoot的Controller中编写文件上接口: ``` @RestController @RequestMapping("/api") @CrossOrigin(origins = "*", maxAge = 3600) public class UploadController { @PostMapping("/upload") public ResponseResult upload(@RequestParam("file") MultipartFile file) { // 处理文件上业务逻辑 } } ``` 在Vue的组件中,可以使用vue-axios实现文件上: ``` <template> <div> <input type="file" @change="uploadFile" /> </div> </template> <script> import axios from &#39;axios&#39;; export default { data() { return { file: null } }, methods: { uploadFile() { let formData = new FormData(); formData.append(&#39;file&#39;, this.file); axios.post(&#39;http://localhost:8080/api/upload&#39;, formData, { headers: { &#39;Content-Type&#39;: &#39;multipart/form-data&#39; } }) .then(res => { console.log(res.data); }) .catch(error => { console.log(error); }) } } } </script> ``` 其中,formData为提交的表单数据,append方法将文件对象添加到表单中。axios.post方法发送POST请求,在请求头中设置Content-Type为multipart/form-data。 总体来说,使用SpringBootVue实现文件上功能比较简单。通过配置SpringBoot的文件上参数和编写文件上接口,配合Vue的文件上组件,即可实现文件的上功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值