Springboot框架实现图片上传显示并保存地址到数据库

引用别人的例子,写的很好
点击跳转

下面是自己的实践,记录学习过程,提交多种数据格式(JSON,String)时,可以分开处理:
对于图片和form其他更新提交的数据,分为两部分进行解决,先上传图片到我们本地文件夹位置,然后在将对应的文件路径返回到前端,前端就可以查看图片了了,同时数据库也存在图片了。

返回前台图片存储的地址,并将地址赋值。然后在更新数据,存储在数据库中
controller层

  @RequestMapping(value = "/addpicture")
    public String uploadFile(MultipartFile file,DrugInfo drugInfo) throws IOException {
        /**
         * 上传图片
         */
        System.out.println(drugInfo.getLogo());
        //图片上传成功后,将图片的地址写到数据库
        //保存图片的路径(这是存在我项目中的images下了,你们可以设置路径)
        String filePath = "自己的文件地址";
        //获取原始图片的拓展名
        String originalFilename = file.getOriginalFilename();
        //新的文件名字
        String newFileName = UUID.randomUUID() + originalFilename;
        //封装上传文件位置的全路径
        File targetFile = new File(filePath, newFileName);
        //把本地文件上传到封装上传文件位置的全路径
        file.transferTo(targetFile);
        drugInfo.setLogo("http://localhost:8080/biyedrug/images/" + newFileName);
        return drugInfo.getLogo();
    }

element的upload
部分代码如下:

<el-upload
                  action="http://localhost:8080/biyedrug/druginfo/addpicture"
                  list-type="picture-card"
                  :on-preview="handlePictureCardPreview"
                  :on-remove="handleRemove"
                  :limit="imgLimit"
                  :show-file-list="true"
                  :on-success="onSuccess"
                  :on-exceed="handleExceed"
              >
                <i class="el-icon-plus"></i>
              </el-upload>
              <el-dialog :visible.sync="dialogVisible">
                <img width="100%" :src="dialogImageUrl" alt="">
              </el-dialog>

处理方法部分代码如下:

<template>
  <div>
    <el-form
        class="detail-form-content"
        ref="ruleForm"
        :model="ruleForm"
        label-width="80px"
    >
 
      <el-row>
        <el-col :span="24">
          <el-form-item v-if="type!='info'" label="logo" prop="logo">
            <img v-if="ruleForm.logo" :src="ruleForm.logo" class="avatar" style="width: 50%">
            <div v-else>
              <el-upload
                  action="http://localhost:8080/biyedrug/druginfo/addpicture"
                  list-type="picture-card"
                  :on-preview="handlePictureCardPreview"
                  :on-remove="handleRemove"
                  :limit="imgLimit"
                  :show-file-list="true"
                  :on-success="onSuccess"
                  :on-exceed="handleExceed"
              >
                <i class="el-icon-plus"></i>
              </el-upload>
              <el-dialog :visible.sync="dialogVisible">
                <img width="100%" :src="dialogImageUrl" alt="">
              </el-dialog>
            </div>
          </el-form-item>
          <div v-else>
            <el-form-item v-if="ruleForm.logo" label="logo" prop="logo">
              <img style="margin-right:20px;" v-bind:key="index"
                   v-for="(item,index) in ruleForm.logo.split(',')" :src="item" width="100" height="100">
            </el-form-item>
          </div>
        </el-col>
      </el-row>

      <el-row style="margin-left: 80px;margin-bottom: 20px">
        <el-col :span="12" v-if="type!='info'">
          <el-row>
            <el-button type="danger" v-if="ruleForm.logo!=''" @click="deletepicture">删除图片</el-button>
            <el-button type="primary" v-if="ruleForm.logo==''">上传图片</el-button>
          </el-row>
        </el-col>
      </el-row>
  </div>
</template>
<script>
export default {
  data() {
    return {
      
      dialogImageUrl: '',
      dialogVisible: false,
      imgLimit: 1
    };
  },
  methods: {
    
    },
   
    handleRemove(file, fileList) {
      console.log(file, fileList);
    },
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    // 图片上传成功后,后台返回图片的路径
    onSuccess: function (res) {
      console.log(res);
      console.log(res);
      this.dialogImageUrl = res;
    },

    /**文件超出个数限制时的钩子 */
    handleExceed() {
      this.$message.error(`只能选择${this.imgLimit}个文件`);
    },

  }
};
</script>
<style scoped>
.editor {
  height: 500px;
}
</style>

然后也就实现了图片的上传
未写完,明天完善

好的,以下是一个简单的 Spring Boot 文件上传并保存数据库的示例代码: 1. 首先,需要添加以下依赖到 pom.xml 文件中: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.oracle.ojdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> ``` 2. 创建一个上传文件的 HTML 表单: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>File Upload</title> </head> <body> <h2>File Upload Form</h2> <form method="POST" action="/upload" enctype="multipart/form-data"> <input type="file" name="file"> <br/><br/> <input type="submit" value="Upload"> </form> </body> </html> ``` 3. 创建一个控制器来处理文件上传的请求: ```java import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.sql.PreparedStatement; import java.sql.SQLException; @Controller public class FileUploadController { @Autowired private JdbcTemplate jdbcTemplate; @RequestMapping("/") public String index() { return "upload"; } @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) throws IOException, SQLException { InputStream inputStream = file.getInputStream(); byte[] bytes = IOUtils.toByteArray(inputStream); jdbcTemplate.update(connection -> { PreparedStatement ps = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)"); ps.setString(1, file.getOriginalFilename()); ps.setBytes(2, bytes); return ps; }); return "redirect:/"; } } ``` 在这个控制器中,我们首先将上传的文件转换为字节数组,然后将它们保存数据库中。使用 jdbcTemplate 对象执行 SQL 语句,并将文件名和字节数组作为参数传递给 PreparedStatement 对象。 4. 最后,创建一个简单的数据库表,用于存储文件信息: ```sql CREATE TABLE files ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), content LONGVARBINARY ); ``` 这个表中有三个列:id、name 和 content。id 是自增的主键,name 列保存上传文件的名称,content 列保存文件的字节数组。 以上就是一个简单的 Spring Boot 文件上传并保存数据库的示例代码。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值