上传图片,base64改为文件流,并转给后端

需求:
在这里插入图片描述

html代码:

 <el-dialog v-model="dialogPicVisible" title="新增图片" width="500">
      <el-form :model="picForm">
        <el-form-item label="图片名称:" :label-width="100">
          <el-input v-model="picForm.picName" clearable />
        </el-form-item>
        <el-form-item label="新增图片:" prop="img" :label-width="100">
          <el-upload
            class="avatar-uploader"
            :show-file-list="false"
            :http-request="uploadFn"
          >
            <img v-if="picForm.file" :src="picForm.file" class="avatar" />
            <el-icon v-else class="avatar-uploader-icon">
              <Plus />
            </el-icon>
          </el-upload>
        </el-form-item>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="dialogPicVisible = false">取 消</el-button>
          <el-button type="primary" @click="submitPicBtn"> 确 认 </el-button>
        </div>
      </template>
    </el-dialog>

这是base64转文件流的代码

// base64转文件流
function base64ToFile(base64Data, filename) {
  // 将base64的数据部分提取出来
  const parts = base64Data.split(";base64,");
  const contentType = parts[0].split(":")[1];
  let strArr = contentType.split("/");
  console.log('strArr',strArr)
  const raw = window.atob(parts[1]);
  // 将原始数据转换为Uint8Array
  const rawLength = raw.length;
  const uInt8Array = new Uint8Array(rawLength);
  for (let i = 0; i < rawLength; ++i) {
    uInt8Array[i] = raw.charCodeAt(i);
  }
  // 使用Blob和提取出的数据内容创建一个新的Blob对象
  const blob = new Blob([uInt8Array], { type: contentType });
  // 创建一个指向Blob对象的URL,并使用这个URL创建一个File对象
  const blobUrl = URL.createObjectURL(blob);
  const newFilename = filename + '.' + strArr[1]

  const file = new File([blob], newFilename, { type: contentType });
  // 返回File对象
  return file;
}

这是确认提交的逻辑

function submitPicBtn() {
  const file = base64ToFile(picForm.file, picForm.picName);
  console.log('file',file)
  let strArr = file.type.split("/");
  var fileForm = new FormData();
  fileForm.append("classifyId", form.classifyId);
  fileForm.append("file", file);
  var newPicName = picForm.picName + "." + strArr[1];
  fileForm.append("picName", newPicName);
  axios
    .post("/h5htglpt/api/uploadPic", fileForm, {
      headers: {
        "Content-Type": "multipart/form-data",
      },
    })
    .then((res) => {
      console.log('res',res)
      if (res.data.code == "0") {
        ElMessage({
          message: "新增成功",
          type: "success",
        });
        dialogPicVisible.value = false
        getTreeList();
      }
    })
    .catch((error) => {});
}


打印上传成功后的file 注意:name需要拼接图片类型的后缀

在这里插入图片描述

这是css的代码

.demo-image .block {
  padding: 30px 0;
  text-align: center;
  border-right: solid 1px var(--el-border-color);
  display: inline-block;
  width: 20%;
  box-sizing: border-box;
  vertical-align: top;
}
.demo-image .block:last-child {
  border-right: none;
}
.demo-image .demonstration {
  display: block;
  color: var(--el-text-color-secondary);
  margin: 10px 0;
  font-weight: bold;
  letter-spacing: 1px;
}

.avatar-uploader .avatar {
  width: 178px;
  height: 178px;
  display: block;
}

::v-deep .avatar-uploader .el-upload {
  border: 1px dashed var(--el-border-color);
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  overflow: hidden;
  transition: var(--el-transition-duration-fast);
}

.avatar-uploader .el-upload:hover {
  border-color: var(--el-color-primary);
}

.el-icon.avatar-uploader-icon {
  font-size: 28px;
  color: #8c939d;
  width: 178px;
  height: 178px;
  text-align: center;
}

相关推荐

  1. vue-quill-editor图片base64转化img标签

    2024-07-10 13:26:04       48 阅读
  2. 将html字符串中的base64图片转换成file

    2024-07-10 13:26:04       43 阅读
  3. springboot接收base64文件

    2024-07-10 13:26:04       27 阅读
  4. 基于Base64Excel文件

    2024-07-10 13:26:04       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 13:26:04       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 13:26:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 13:26:04       4 阅读
  4. Python语言-面向对象

    2024-07-10 13:26:04       5 阅读

热门阅读

  1. 如何在vue3中实现动态路由

    2024-07-10 13:26:04       7 阅读
  2. 使用RAGAs评估基于Milvus Cloud的RAG应用

    2024-07-10 13:26:04       11 阅读
  3. electron通信与持久化存储

    2024-07-10 13:26:04       10 阅读
  4. Electron Forge 打包更改打包后图片

    2024-07-10 13:26:04       11 阅读
  5. 【ES】--Elasticsearch的高亮模式

    2024-07-10 13:26:04       12 阅读
  6. JVM专题九:JVM分代知识点梳理

    2024-07-10 13:26:04       8 阅读
  7. 谈谈检测浏览器类型

    2024-07-10 13:26:04       6 阅读
  8. npm 常用命令详解与实践

    2024-07-10 13:26:04       11 阅读
  9. node.js 面试题 1

    2024-07-10 13:26:04       7 阅读
  10. Eureka应用场景和优势

    2024-07-10 13:26:04       10 阅读