当前位置:   article > 正文

spring boot +Vue + element-ui实现图片上传和回显_springbootvue图片上传回显

springbootvue图片上传回显

对于图片上传和显示后台采用SpringBoot实现:

  1. package com.example.demo.controller;
  2. import cn.hutool.core.io.FileUtil;
  3. import cn.hutool.core.util.IdUtil;
  4. import com.example.demo.domain.Books;
  5. import com.example.demo.service.BooksService;
  6. import com.example.demo.util.Result;
  7. import io.swagger.annotations.ApiOperation;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.web.bind.annotation.*;
  10. import org.springframework.web.multipart.MultipartFile;
  11. import javax.annotation.Resource;
  12. import javax.servlet.http.HttpServletResponse;
  13. import java.io.File;
  14. import java.io.IOException;
  15. import java.io.OutputStream;
  16. import java.io.UnsupportedEncodingException;
  17. import java.net.URLEncoder;
  18. import java.util.Arrays;
  19. import java.util.List;
  20. @RestController
  21. @RequestMapping("/books")
  22. public class BookController {
  23. @Value("${server.port}")
  24. private String port;
  25. String path=System.getProperty("user.dir") +"/book-java/src/main/resources/upload/";
  26. private static final String host="http://localhost";
  27. @Resource
  28. private BooksService booksService;
  29. @ApiOperation("图书列表")
  30. @GetMapping("/")
  31. public Result<List<Books>> findBooks(){
  32. return new Result<>(true, 200, "OK", this.booksService.list());
  33. }
  34. @ApiOperation("新增图书")
  35. @PostMapping("/add")
  36. public Result<?> addBook(@RequestBody Books books){
  37. return this.booksService.save(books)
  38. ? new Result<>(true, 200, "新增成功!")
  39. : new Result<>(false, 202, "新增失败!");
  40. }
  41. @ApiOperation("上传图片")
  42. @PostMapping("/upload")
  43. public Result<?> upload(MultipartFile file){
  44. System.out.println(path);
  45. String id= IdUtil.fastSimpleUUID();
  46. String originalFilename = file.getOriginalFilename();
  47. String imgPath= path+id+"_"+originalFilename;
  48. System.out.println(imgPath);
  49. try {
  50. FileUtil.writeBytes(file.getBytes(),imgPath);
  51. } catch (IOException e) {
  52. e.printStackTrace();
  53. return new Result<>(false, 303, "上传失败!");
  54. }
  55. return new Result<>(true, 200, "上传成功", host+":"+this.port+"/books/"+id);
  56. }
  57. @GetMapping("/{flag}")
  58. @ApiOperation("文件下载")
  59. public void downFile(@PathVariable String flag, HttpServletResponse response){
  60. OutputStream outputStream=null;
  61. File file=new File(path);
  62. List<String> list= Arrays.asList(file.list());
  63. String fileName=list.stream().filter(name->name.contains(flag)).findAny().orElse("");
  64. if(fileName!=null && !fileName.isEmpty()){
  65. try {
  66. response.addHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName, "utf-8"));
  67. response.setContentType("application/octet-stream");
  68. byte[] arr= FileUtil.readBytes(path+fileName);
  69. outputStream=response.getOutputStream();
  70. outputStream.write(arr);
  71. outputStream.flush();
  72. outputStream.close();
  73. } catch (UnsupportedEncodingException e) {
  74. e.printStackTrace();
  75. } catch (IOException e) {
  76. e.printStackTrace();
  77. }
  78. }
  79. }
  80. }

这里要特别注意的是:参数名称必须是file,必须是post方式!

public Result<?> upload(MultipartFile file){

前端Vue:

  1. <el-dialog
  2. title="添加图书"
  3. :visible.sync="dialogVisible"
  4. width="30%"
  5. :before-close="handleClose">
  6. <div>
  7. <el-form :model="book" label-width="120px">
  8. <el-form-item label="图书名称">
  9. <el-input v-model="book.title"></el-input>
  10. </el-form-item>
  11. <el-form-item label="图书作者">
  12. <el-input v-model="book.author"></el-input>
  13. </el-form-item>
  14. <el-form-item label="图书价格">
  15. <el-input v-model="book.price"></el-input>
  16. </el-form-item>
  17. <el-form-item label="库存数量">
  18. <el-input v-model="book.kucun"></el-input>
  19. </el-form-item>
  20. <el-form-item label="图书封面">
  21. <el-upload
  22. class="upload-demo"
  23. v-model="book.pic"
  24. action="http://localhost:8081/books/upload" :on-success="upPic">
  25. <el-button size="small" type="primary">点击上传</el-button>
  26. </el-upload>
  27. </el-form-item>
  28. </el-form>
  29. </div>
  30. <span slot="footer" class="dialog-footer">
  31. <el-button @click="dialogVisible = false">取 消</el-button>
  32. <el-button type="primary" @click="addBook">确 定</el-button>
  33. </span>
  34. </el-dialog>

图片上传:

  1. upPic(resp){
  2. console.log(resp.data);
  3. //获取图片名称
  4. this.book.pic=resp.data;
  5. },

新增:

  1. addBook(){
  2. request.post('/books/add',this.book).then(resp=>{
  3. if(resp.code===200){
  4. this.$message.success('新增图书成功!');
  5. this.book={};
  6. this.getBooks();
  7. this.dialogVisible=false;
  8. }else{
  9. this.$message.error('新增图书失败!')
  10. }
  11. })
  12. },

图片的显示:

  1. <el-table-column
  2. label="封面"
  3. >
  4. <template #default="scope">
  5. <el-image
  6. style="width: 50px; height: 50px"
  7. :src="scope.row.pic"
  8. :preview-src-list="[scope.row.pic]">
  9. </el-image>
  10. </template>
  11. </el-table-column>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/428623
推荐阅读
相关标签
  

闽ICP备14008679号