V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
langhuishan
V2EX  ›  问与答

wails 后端将文件转化成[]byte,发送到前端,前端如何显示呢?

  •  
  •   langhuishan · 176 天前 · 798 次点击
    这是一个创建于 176 天前的主题,其中的信息可能已经有所发展或是发生改变。

    chatgpt 回答的是 blob ,还是无法显示。通过 a 标签下载下来的文件大小也不一致。 后端代码

    func (a *App) Greet(name string) ([]byte, error) {
    	
    	pdfData, err := ioutil.ReadFile(".//aaa.pdf")
    	if err != nil {
    		return nil, err
    	}
    	return pdfData, nil
    
    }
    

    前端代码

    const fetchBlob = async () => {
          try {
            
            const pdfData = await Greet('aaa');
            const blob = new Blob([pdfData], { type: 'application/pdf' });
            
            console.log(blob)
            const url = URL.createObjectURL(blob);
            setBlobUrl(url);
          } catch (error) {
            console.error('Error fetching blob:', error);
          }
        };
    
    5 条回复    2024-07-11 10:42:16 +08:00
    bojackhorseman
        1
    bojackhorseman  
       176 天前
    如果是用 axios 请求,要多加一个参数,返回的才是文件
    {
    format: "blob"
    }
    maocat
        2
    maocat  
       176 天前 via iPhone
    前端应该接受的是 arrayuint8 这个得自己转一下
    leyoumake1997
        3
    leyoumake1997  
       176 天前
    一般转 []byte 转 base64 都可以显示的到 Html 元素上的。wails 也支持 Assets Handle ([具体可以参考]( https://wails.io/zh-Hans/docs/guides/dynamic-assets))
    LLaMA2
        4
    LLaMA2  
       176 天前
    后端返回文件流字节码,同时在响应头带上 Content-Type
    例如你的文件是 pdf , 那么 Content-Type:application/pdf

    这样你的 microsift edge 浏览器默认就是可以看到 pdf 的,
    如果是 image/png 之类的,可以直接将 url 写到 img 标签的 src 属性


    如果是浏览器无法预览的文件,例如 exe, 那么头是 application/octet-stream ,浏览器会默认呼出下载
    langhuishan
        5
    langhuishan  
    OP
       168 天前
    感谢楼上回答,最后还是用的 pdf.js
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:13 · PVG 05:13 · LAX 13:13 · JFK 16:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.