Heim > Java > javaLernprogramm > So verwenden Sie Springboot+vue, um Bilder in die Datenbank hochzuladen und anzuzeigen

So verwenden Sie Springboot+vue, um Bilder in die Datenbank hochzuladen und anzuzeigen

WBOY
Freigeben: 2023-05-12 09:52:05
nach vorne
2641 Leute haben es durchsucht

    1. Frontend-Einstellungen

    Das Frontend ist Vue + Element-UI und verwendet die El-Upload-Komponente (vom Beamten referenziert), um Bilder hochzuladen:

    <el-upload
         ref="upload"
         class="avatar-uploader"
         action="/setimg"
         :http-request="picUpload"
         :show-file-list="false"
         :auto-upload="false"
         :on-success="handleAvatarSuccess"
         :before-upload="beforeAvatarUpload">
       <img  v-if="$hostURL+imageUrl" :src="$hostURL+imageUrl" class="avatar" alt="So verwenden Sie Springboot+vue, um Bilder in die Datenbank hochzuladen und anzuzeigen" >
       <i v-else class="el-icon-plus avatar-uploader-icon"></i>
     </el-upload>
    
    <el-button type="primary" @click="submitUpload">修改</el-button>
    Nach dem Login kopieren

    AktionSie können es festlegen Hier oben, wie Sie möchten, denn es gibt : http- auf der hinteren Anfrage Stellen Sie die Anfrage selbst ein. Beachten Sie, dass Sie :auto-upload="false" benötigen, und zwar auf der Vorderseite -End- und Back-End-Verbindungen müssen domänenübergreifende Probleme lösen. Eine globale Variable ist in $hostURL+imageUrl definiert:

    //在main.js中
    	Vue.prototype.$hostURL=&#39;http://localhost:8082&#39;
    Nach dem Login kopieren

    In Methoden:

    methods:{
    //这里是官方的方法不变
    	handleAvatarSuccess(res, file){
    	      this.imageUrl = URL.createObjectURL(file.raw);
    	},
        beforeAvatarUpload(file) {
          const isJPG = file.type === &#39;image/jpeg&#39;;
          const isLt2M = file.size / 1024 / 1024 < 2;
    
          if (!isJPG) {
            this.$message.error(&#39;上传头像图片只能是 JPG 格式!&#39;);
          }
          if (!isLt2M) {
            this.$message.error(&#39;上传头像图片大小不能超过 2MB!&#39;);
          }
          return isJPG && isLt2M;
        },
    //这里是自定义发送请求
        picUpload(f){
         let params = new FormData()
         //注意在这里一个坑f.file
         params.append("file",f.file);
         this.$axios({
           method:&#39;post&#39;,
           //这里的id是我要改变用户的ID值
           url:&#39;/setimg/&#39;+this.userForm.id,
           data:params,
           headers:{
             &#39;content-type&#39;:&#39;multipart/form-data&#39;
           }
         }).then(res=>{
         //这里是接受修改完用户头像后的JSON数据
           this.$store.state.menu.currentUserInfo=res.data.data.backUser
           //这里返回的是头像的url
           this.imageUrl = res.data.data.backUser.avatar
         })
       },
       //触发请求
        submitUpload(){
       this.$refs.upload.submit();
     	}
    }
    Nach dem Login kopieren

    Im obigen Code gibt es eine Grube f.file . Ich habe viele Blogs gelesen und festgestellt, dass einige Blogs nur f, aber keine .file haben, was zu 401- und 505-Fehlern führt.

    2. Back-End-Code

    1. Erstellen Sie eine Datenbank

    So verwenden Sie Springboot+vue, um Bilder in die Datenbank hochzuladen und anzuzeigen

    Hier ist der Avatar die gespeicherte Teil-URL des hochgeladenen Bildes

    2. Entitätsklasse:

    using mybatis plus

    @Data
    public class SysUser extends BaseEntity{
    //这里的BaseEntity是id,statu,created,updated数据
        private static final Long serialVersionUID = 1L;
    
        @NotBlank(message = "用户名不能为空")
        private String username;
    
    //    @TableField(exist = false)
        private String password;
        @NotBlank(message = "用户名称不能为空")
        private String name;
        //头像
        private String avatar;
    
        @NotBlank(message = "邮箱不能为空")
        @Email(message = "邮箱格式不正确")
        private String email;
        private String tel;
        private String address;
        @TableField("plevel")
        private Integer plevel;
        private LocalDateTime lastLogin;
    }
    Nach dem Login kopieren

    3. Akzeptieren Sie die Anfrage und senden Sie die Daten zurück

    @Mapper
    @TableName("sys_user")
    public interface SysUserMapper extends BaseMapper<SysUser> {
    }
    Nach dem Login kopieren

    Die Speicheradresse des Bildes in der YML-Datei:

        @Value("${file.upload-path}")
        private String pictureurl;
        @PostMapping("/setimg/{id}")
        public Result setImg(@PathVariable("id") Long id, @RequestBody MultipartFile file){
            String fileName = file.getOriginalFilename();
            File saveFile = new File(pictureurl);
            //拼接url,采用随机数,保证每个图片的url不同
            UUID uuid = UUID.randomUUID();
            //重新拼接文件名,避免文件名重名
            int index = fileName.indexOf(".");
            String newFileName ="/avatar/"+fileName.replace(".","")+uuid+fileName.substring(index);
            //存入数据库,这里可以加if判断
            SysUser user = new SysUser();
            user.setId(id);
            user.setAvatar(newFileName);
            sysUserMapper.updateById(user);
            try {
                //将文件保存指定目录
                file.transferTo(new File(pictureurl + newFileName));
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("保存成功");
            SysUser ret_user = sysUserMapper.selectById(user.getId());
            ret_user.setPassword("");
            return Result.succ(MapUtil.builder()
                    .put("backUser",ret_user)
                    .map());
        }
    Nach dem Login kopieren

    3. Zeigen Sie das Bild an

    Implementieren Sie das Front-End-Vue

    :scr

    Weitere URL-Anzeige des Avatar-Bildes, Sie müssen die statische Ressourcenkonfiguration in WebMVC einrichten

    Erstellen Sie die WebConfig-Klasse

    file:
      upload-path: D:\Study\MyAdmin\scr
    Nach dem Login kopieren
    Auf diese Weise können Sie das Avatar-Bild anzeigen

    2. Achten Sie auf Kreuz -Domänenprobleme und die vorherige globale Adressvariable

    vue.config.js-Datei (falls nicht, erstellen Sie sie im selben Verzeichnis wie scr):

    @Configuration
    public class WebConfig implements WebMvcConfigurer{
        private String filePath = "D:/Study/MyAdmin/scr/avatar/";
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/avatar/**").addResourceLocations("file:"+filePath);
            System.out.println("静态资源获取");
        }
    }
    Nach dem Login kopieren

    main.js:

    module.exports = {
        devServer: {
            // 端口号
            open: true,
            host: &#39;localhost&#39;,
            port: 8080,
            https: false,
            hotOnly: false,
            // 配置不同的后台API地址
            proxy: {
                &#39;/api&#39;: {
                //后端端口号
                    target: &#39;http://localhost:8082&#39;,
                    ws: true,
                    changOrigin: true,
                    pathRewrite: {
                        &#39;^/api&#39;: &#39;&#39;
                    }
                }
            },
            before: app => {}
        }
    }
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonSo verwenden Sie Springboot+vue, um Bilder in die Datenbank hochzuladen und anzuzeigen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage