4***@qq.com
4***@qq.com
  • 发布:2026-02-09 21:44
  • 更新:2026-02-09 21:45
  • 阅读:16

插入图片错误

分类:uni-app

uni-admin wangeditor

add.vue

<template>  
  <view class="uni-container">  
    <uni-forms ref="form" :model="formData" validateTrigger="bind">  
      <uni-forms-item name="author" label="作者">  
        <uni-easyinput placeholder="请输入作者名" v-model="formData.author" trim="end"></uni-easyinput>  
      </uni-forms-item>  
      <uni-forms-item name="avatar" label="封面大图">  
        <uni-file-picker return-type="object" v-model="formData.avatar"></uni-file-picker>  
      </uni-forms-item>  
      <uni-forms-item name="title" label="标题" required>  
        <uni-easyinput placeholder="标题" v-model="formData.title" trim="both"></uni-easyinput>  
      </uni-forms-item>  
      <uni-forms-item name="content" label="文章内容" required>  
        <div id="div1"></div>  
      </uni-forms-item>  
      <uni-forms-item name="article_status" label="文章状态">  
        <uni-data-checkbox v-model="formData.article_status" :localdata="formOptions.article_status_localdata"></uni-data-checkbox>  
      </uni-forms-item>  
      <uni-forms-item name="view_count" label="阅读量">  
        <uni-easyinput placeholder="阅读量" type="number" v-model="formData.view_count"></uni-easyinput>  
      </uni-forms-item>  
      <uni-forms-item name="is_essence" label="推荐">  
        <switch @change="binddata('is_essence', $event.detail.value)" :checked="formData.is_essence"></switch>  
      </uni-forms-item>  
      <uni-forms-item name="publish_date" label="发表时间">  
        <uni-datetime-picker return-type="timestamp" v-model="formData.publish_date"></uni-datetime-picker>  
      </uni-forms-item>  
      <view class="uni-button-group">  
        <button type="primary" class="uni-button" style="width: 100px;" @click="submit">提交</button>  
        <navigator open-type="navigateBack" style="margin-left: 15px;">  
          <button class="uni-button" style="width: 100px;">返回</button>  
        </navigator>  
      </view>  
    </uni-forms>  
  </view>  
</template>  

<script>  
  import { validator } from '../../js_sdk/validator/xzs_news.js';  
import E from 'wangeditor'  
  const db = uniCloud.database();  
  const dbCmd = db.command;  
  const dbCollectionName = 'xzs_news';  
let editor=null  
  function getValidator(fields) {  
    let result = {}  
    for (let key in validator) {  
      if (fields.includes(key)) {  
        result[key] = validator[key]  
      }  
    }  
    return result  
  }  
  export default {  
    data() {  
      let formData = {  
        "author": "",  
        "avatar": null,  
        "title": "",  
        "content": "",  
        "article_status": 1,  
        "view_count": 55,  
        "is_essence": null,  
        "publish_date": null  
      }  
      return {  
        formData,  
        formOptions: {  
          "article_status_localdata": [  
            {  
              "value": 0,  
              "text": "草稿箱"  
            },  
            {  
              "value": 1,  
              "text": "已发布"  
            }  
          ]  
        },  
        rules: {  
          ...getValidator(Object.keys(formData))  
        }  
      }  
    },  
    onReady() {  
      this.$refs.form.setRules(this.rules)  
      this.onWangEdit()  
    },  
    methods: {  
      //初始化wangedit  
      onWangEdit(){  
          editor =new E('#div1');  
          editor.config.zIndex=0  
          editor.config.onblur =  (newHtml)=> {  
              this.formData.content =newHtml  
          }  
          editor.config.customUploadImg = function (resultFiles, insertImgFn) {  
                resultFiles.forEach(item=>{  
                    let path = URL.createObjectURL(item)  
                    let name = item.name;  
                    uniCloud.uploadFile({  
                        filePath:path,  
                        cloudPath:name  
                    }).then(res=>{  
                         insertImgFn(res.fileID)  
                    })  
                })  

          }  
          editor.create()  
      },  
      /**  
       * 验证表单并提交  
       */  
      submit() {  
        uni.showLoading({  
          mask: true  
        })  
        this.$refs.form.validate().then((res) => {  
          return this.submitForm(res)  
        }).catch(() => {  
        }).finally(() => {  
          uni.hideLoading()  
        })  
      },  

      /**  
       * 提交表单  
       */  
      submitForm(value) {  
        // 使用 clientDB 提交数据  
        return db.collection(dbCollectionName).add(value).then((res) => {  
          uni.showToast({  
            title: '新增成功'  
          })  
          this.getOpenerEventChannel().emit('refreshData')  
          setTimeout(() => uni.navigateBack(), 500)  
        }).catch((err) => {  
          uni.showModal({  
            content: err.message || '请求服务失败',  
            showCancel: false  
          })  
        })  
      }  
    }  
  }  
</script>

前端显示插入图片错误,然而云服务却接受到了图片,只是前端这了图片没有回显出来

2026-02-09 21:44 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-ui官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。

你遇到的问题是:wangeditor 插入图片时,云服务已收到图片,但前端未回显。根据你提供的代码和现象,问题出在 customUploadImg 中的 insertImgFn(res.fileID) 这一步未能正确触发回显。

✅ 问题原因分析

你使用了:

let path = URL.createObjectURL(item)

然后:

uniCloud.uploadFile({  
  filePath: path,  
  cloudPath: name  
})

URL.createObjectURL(item) 返回的是一个 浏览器临时 blob URL,这个 URL 在 uniCloud.uploadFile 中并不适用,尤其在非 H5 平台(如 App、小程序)中会导致上传失败或图片无法回显。

✅ 正确做法

应使用 uni.chooseImageuni.chooseMedia 获取本地临时路径(tempFilePath),再上传:

editor.config.customUploadImg = function (resultFiles, insertImgFn) {  
  resultFiles.forEach(item => {  
    uniCloud.uploadFile({  
      filePath: item.path, // 注意:这里是本地临时路径  
      cloudPath: item.name  
    }).then(res => {  
      insertImgFn(res.fileID); // 上传成功后插入图片  
    }).catch(err => {  
      console.error('上传失败', err);  
    });  
  });  
};

✅ 建议修改点

  1. 不要使用 URL.createObjectURL,它仅适用于浏览器环境。
  2. 确保 item.path 是本地临时路径,例如通过 uni.chooseImage 获取。
  3. 检查 res.fileID 是否为有效云存储地址,可在控制台打印确认。

✅ 示例:结合 uni.chooseImage 使用

uni.chooseImage({  
  count: 1,  
  success: (res) => {  
    const tempFilePath = res.tempFilePaths[0];  
    uniCloud.uploadFile({  
      filePath: tempFilePath,  
      cloudPath: 'images/' + Date.now() + '.jpg'  
    }).then(uploadRes => {  
      editor.cmd.do('insertHtml', `<img src="${uploadRes.fileID}" style="max-width:100%;">`);  
    });  
  }  
});

✅ 总结

你当前的问题是由于使用了不适用于 uni-app 平台的 URL.createObjectURL 导致上传成功但无法回显。建议改为使用 uni.chooseImage 获取本地路径,再上传并插入图片。

如需进一步支持,请确认你当前运行的平台(H5?App?小程序?),不同平台路径处理方式略有差异。

内容为 AI 生成,仅供参考

要回复问题请先登录注册