langhuishan
V2EX  ›  问与答

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

  •  
  •   langhuishan · Jul 3, 2024 · 1664 views
    This topic created in 710 days ago, the information mentioned may be changed or developed.

    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 replies    2024-07-11 10:42:16 +08:00
    dumbass
        1
    dumbass  
       Jul 3, 2024
    如果是用 axios 请求,要多加一个参数,返回的才是文件
    {
    format: "blob"
    }
    maocat
        2
    maocat  
       Jul 3, 2024 via iPhone
    前端应该接受的是 arrayuint8 这个得自己转一下
    leyoumake1997
        3
    leyoumake1997  
       Jul 3, 2024
    一般转 []byte 转 base64 都可以显示的到 Html 元素上的。wails 也支持 Assets Handle ([具体可以参考]( https://wails.io/zh-Hans/docs/guides/dynamic-assets))
    LLaMA2
        4
    LLaMA2  
       Jul 3, 2024
    后端返回文件流字节码,同时在响应头带上 Content-Type
    例如你的文件是 pdf , 那么 Content-Type:application/pdf

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


    如果是浏览器无法预览的文件,例如 exe, 那么头是 application/octet-stream ,浏览器会默认呼出下载
    langhuishan
        5
    langhuishan  
    OP
       Jul 11, 2024
    感谢楼上回答,最后还是用的 pdf.js
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   896 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 20:57 · PVG 04:57 · LAX 13:57 · JFK 16:57
    ♥ Do have faith in what you're doing.