(工作随记)VUE+ElementUI 照片墙上传回显 Base64转码

时间:2024-11-15 20:10:44

工作中需要做一个照片墙一样的东西,做出来的效果是这样的

官方文档在这里  /#/zh-CN/component/installation

下面是一些代码片段,可以参考一下

  1. <el-dialog
 //第一张图片的样式
  2. :visible="true"
  3. :title="dialogTitle"
  4. :before-close="onClose">

  5. <el-upload
  6. align="center"
  7. action="/posts/"
  8. :on-preview="handlePictureCardPreview"
 //图片方法方法
  9. :on-remove="handleRemove"
 //删除方法
  10. :on-change="change"
 //图片改动时触发
  11. :file-list="photoList"
  12. :auto-upload=""
  13. :disabled=""
  14. list-type="picture-card">

  15. <el-button
  16. :disabled=""
  17. size="small"
  18. type="primary">点击上传
  19. </el-button>
  20. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  21. </el-upload>
  22. <span slot="footer">
  23. <el-button @click="onClose">取消</el-button>
  24. <el-button type="success" @click="submit">确认</el-button>
  25. </span>
  26. </el-dialog>
  1. //第二张图片的样式
  2. <el-dialog v-model="dialogVisible" size="tiny">
  3. <img width="100%" :src="dialogImageUrl" alt="">
  4. <el-form :model="form">
  5. <el-form-itemlabel="链接地址"label-width="13%">
  6. <el-input v-model=""/>
  7. </el-form-item>
  8. <el-form-item align="center">
  9. <el-button @click="addrOnClose">取消</el-button>
  10. <el-button type="success" @click="addrSubmit">确认</el-button>
  11. </el-form-item>
  12. </el-form>
  13. </el-dialog>

 

下面的方法比较核心,是前端转码的方法 ,回显的话把Base64放到URL里就可以直接显示啦。如果不转码的话出来的url是blob:http://localhost:3000/f64f6f96-1eca-4c4b-8cd5-c20994e27cfa这个样子的,但是这个样子的链接地址放到后端去找图片转码会失败,因为转义的斜杠会变成反斜杠,找不到图片所以会失败,正在找解决的方法,暂且先在前端转码成功后传到后端。(有知道的小伙伴可以指教一下)

  1. getBase64 (file) {
 //要上传的图片转Base64
  2. return new Promise(function (resolve, reject) {

  3. let reader = new FileReader()

  4. let imgResult = ''
  5. reader.readAsDataURL(file)

  6. reader.onload = function () {

  7. imgResult = reader.result
  8. }

  9. reader.onerror = function (error) {

  10. reject(error)

  11. }

  12. reader.onloadend = function () {

  13. resolve(imgResult)

  14. }

  15. })

  16. }
  17. change (file, fileList) {
  18. this.getBase64(file.raw).then(res => {

  19. console.log(res) //转码之后的输出
  20. })
  21. }

后端转Base64方法

  1. public static String getImgStr(String imgFile){

  2. //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
  3. InputStream in = null;

  4. byte[] data = null;

  5. //读取图片字节数组
  6. try
 {

  7. in = new FileInputStream(new File(imgFile));

  8. data = new byte[()];
 (data);
 ();

  9. }

  10. catch (IOException e)
 {

  11. ();

  12. }

  13. return new String(Base64.encodeBase64(data));

  14. }