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

147 天前
 langhuishan

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);
      }
    };
761 次点击
所在节点    问与答
5 条回复
bojackhorseman
147 天前
如果是用 axios 请求,要多加一个参数,返回的才是文件
{
format: "blob"
}
maocat
147 天前
前端应该接受的是 arrayuint8 这个得自己转一下
leyoumake1997
147 天前
一般转 []byte 转 base64 都可以显示的到 Html 元素上的。wails 也支持 Assets Handle ([具体可以参考]( https://wails.io/zh-Hans/docs/guides/dynamic-assets))
LLaMA2
147 天前
后端返回文件流字节码,同时在响应头带上 Content-Type
例如你的文件是 pdf , 那么 Content-Type:application/pdf

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


如果是浏览器无法预览的文件,例如 exe, 那么头是 application/octet-stream ,浏览器会默认呼出下载
langhuishan
139 天前
感谢楼上回答,最后还是用的 pdf.js

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1054489

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX