Element upload组件上传图片与回显图片

场景:新增商品时需要添加商品主图,新增成功之后可编辑

上传图片:

<el-form-item label="专区logo:" style="height:160px">
            <div class="img">
              <el-upload
                action="https://testopenapi.nbdeli.com/crm/customer/saveChannelLogoFile"
                :limit="1"
                :on-preview="handlePictureCardPreview"
                :on-success="handleUploadSuccess"
                list-type="picture-card"
                :on-remove="handleRemove"
                :class="{disabled:uploadDisabled}"
                :file-list="fileList"
              >
                <i class="el-icon-plus"></i>
              </el-upload>
              <el-dialog :visible.sync="dialogVisible">
                <img width="100%" :src="ruleForm.dialogImageUrl" alt />
              </el-dialog>
            </div>
            <div class="imgSpan2">只能上传jpg/png文件,50X50px</div>
          </el-form-item>
data(){
  return{
    uploadDisabled: false,
        logoId: "1", //专区logo id
       dialogVisible: false,
      fileList: [],
       ruleForm: {
        dialogImageUrl: "1", //专区logo 上传到后台之后,后台会返回一个id,只需要给后台传id,但是点击编辑的时候后台返回的是http地址
      },
   }  
}
 
  
//删除图片
handleRemove(file, fileList) {
console.log(file);
this.uploadDisabled = false;
},
//上传中
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      console.log(this.dialogImageUrl);
      this.dialogVisible = true;
      this.uploadDisabled = true;
    },
    //上传成功
    handleUploadSuccess(file) {
      this.ruleForm.dialogImageUrl = file.result; //专区logoId
      this.uploadDisabled = true;
    },

上传图片就完成了

 

以下是编辑图片;

在点击编辑的时候 ,获取url地址
需要把url 添加到 fileList 里面
let urlStr = response.data.result.url.split(","); //logo地址
          urlStr.forEach(item => {
            let obj = new Object();
            obj.url = item;
            this.fileList.push(obj);
          });

 

转载于:https://www.cnblogs.com/lidonglin/p/11577602.html

### 实现 Element Plus 上传图片后的回显功能 在使用 Element Plus 的 `el-upload` 组件时,可以通过设置 `on-success` 回调函数来处理文件上传成功后的逻辑。此回调函数会在文件上传成功后被触发,并接收服务器返回的数据作为参数。为了实现上传图片后的回显功能,可以将服务器返回的图片 URL 设置到组件的 `file-list` 属性中[^1]。 以下是完整的实现代码示例: ```vue <template> <el-upload action="http://localhost:3000/upload" :on-success="handleSuccess" :file-list="fileList" list-type="picture-card" > <el-icon><Plus /></el-icon> </el-upload> </template> <script> import { ref } from "vue"; import { ElMessage } from "element-plus"; export default { setup() { const fileList = ref([]); const handleSuccess = (response, file, fileList) => { // 将服务器返回的文件路径添加到 file 对象中 file.url = response.file.path; // 假设服务器返回了文件路径 ElMessage.success("File uploaded successfully"); }; return { fileList, handleSuccess, }; }, }; </script> ``` 在上述代码中: - `action` 属性指定了文件上传的目标地址。 - `on-success` 属性绑定了一个回调函数 `handleSuccess`,用于处理上传成功后的逻辑。 - `file-list` 属性绑定了一个响应式数组 `fileList`,用于存储已上传的文件列表。 - 在 `handleSuccess` 函数中,将服务器返回的文件路径赋值给 `file.url`,从而实现图片回显[^2]。 ### 后端实现文件上传路径返回 后端需要正确配置文件上传并返回文件路径。以下是一个基于 Node.js 和 Express 的示例: ```javascript import express from 'express'; import multer from 'multer'; import path from 'path'; import cors from 'cors'; // 初始化 express 应用 const app = express(); app.use(cors()); // 设置文件存储配置 const storage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, 'uploads/'); // 文件存储目录 }, filename: (req, file, cb) => { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9); cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname)); // 文件名 }, }); const upload = multer({ storage: storage }); // 创建文件上传路由 app.post('/upload', upload.single('file'), (req, res) => { if (!req.file) { return res.status(400).send({ message: 'No file uploaded' }); } res.send({ message: 'File uploaded successfully', file: { path: `/uploads/${req.file.filename}`, // 返回文件路径 }, }); }); // 静态资源服务 app.use(express.static(path.join(__dirname, '../uploads'))); // 启动服务器 const PORT = 3000; app.listen(PORT, () => { console.log(`Server is running on http://localhost:${PORT}`); }); ``` 在上述代码中: - 使用 `multer` 中间件处理文件上传。 - 在上传成功后,返回文件的路径给前端[^2]。 ### 注意事项 - 确保后端返回的文件路径是正确的,并且能够通过浏览器访问。 - 如果文件存储在本地服务器上,确保服务器配置了静态资源服务。 - 如果文件存储在云端(如 AWS S3),则需要返回云存储的 URL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值