vue3如何获取静态资源? vue3<mebed>引入src后404 Not Found解决办法

bug出现背景:项目中需要正在网页中插入swf文件播放flash插件

代码如下:

<template>
  <div class="out-content" style="background-color: #fff;">
    <p class="out-content-title"><database-outlined style="transform: translateY(4px);margin-right: 5px;" />绘制流程图</p>
    <div style="height: 92%; padding:1%">
      <object id="presentation" width="100%" height="630px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" align="middle">
        <param name="allowScriptAccess" value="sameDomain" />
        <param name="movie" value="/src/assets/WFDesigner1.swf" />
        <param name="quality" value="high" />
        <param name="allowFullScreen" value="true" />
        <param name="wmode" value="Opaque" />
        <embed :src="state.serverUrl" quality="high"  width="100%" height="100%" name="presentation" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" allowFullScreen="true" />
      </object>
    </div>
  </div>
</template>

<script setup lang="ts">

  // data数据
  const state = reactive(new bpmRuleStateParam());

  // 获取图片url
  const getserverUrl = async () => {
    try {
      const data = await getServerUrl();
      if (data.code === 200) {
        state.serverUrl = "/assets/swf/WFDesigner.swf?url="+ data.data +"messagebroker/amf"
      }
    } catch (error) {
      return Promise.reject(error);    
    }
  };
  getserverUrl();

</script>

结果:运行起来后发现页面是空白的,并且在控制台发现 404 Not Found

我看了一下/assets/swf/WFDesigner.swf地址,在我项目夹中是有的,路径也没有问题,可为什么就是找不到页面呢?

后来,我突然想到了,vue3中引入图片的时候也会出现在这种情况,找不到对应图片,原因就是途径的问题,那咱们这里报错应该也是路径的问题!

解决方法:将swf文件放入到了静态资源-public文件中再在对应页面引入后就可以正常显示了!

代码如下:

(1)将swf文件放置在public文件下

(2)打开vue.config.js文件,静态资源路径process.env.BASE_URL:

// 引入
const { defineConfig } = require('@vue/cli-service');

// 导出
module.exports = defineConfig({
    publicPath: process.env.BASE_URL,
})

(3)定义变量获取静态资源路径process.env.BASE_URL并拼接:

<embed :src="state.serverUrl">

let serveUrls = [`${process.env.BASE_URL}swf/WFDesigner.swf`];

state.serverUrl = serveUrls + "?url="+ data.data +"messagebroker/amf"

这样就可以正常显示swf下的文件啦!

猜你喜欢

转载自blog.csdn.net/zf2451597310/article/details/129583617