V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
darknoll
V2EX  ›  程序员

后端返回二进制文件流,前端用 blob 接收,接着 chrome 使用外部第三方程序打开,这个能做到吗?

  •  
  •   darknoll · 2020-11-02 13:57:37 +08:00 · 2630 次点击
    这是一个创建于 1516 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为该文件格式是公司自定义的文件格式,只有公司自己的软件才可以打开。 能实现这个功能吗?

    14 条回复    2020-11-02 19:20:58 +08:00
    lamada
        1
    lamada  
       2020-11-02 14:07:53 +08:00
    pc 上不清楚,手机上 url schema 可以唤起第三方 app 。不过你这 blob 也得先保存到本地文件吧。
    treblex
        2
    treblex  
       2020-11-02 14:10:32 +08:00
    @lamada #1 把 url 拼好给软件不就行了,下载和解码在软件做
    jiangnan01
        3
    jiangnan01  
       2020-11-02 14:18:22 +08:00
    应该是可以的,参考磁力链唤起迅雷
    lamada
        4
    lamada  
       2020-11-02 14:21:19 +08:00
    @suke971219 老哥说的在理,交给软件内处理就好了。我猜 lz 的意思是软件不支持自己下载
    takemeaway
        5
    takemeaway  
       2020-11-02 14:23:06 +08:00
    可以的。 前端接收后的需要是完整文件。
    然后通过浏览器唤起自己的软件去打开。
    wmhx
        6
    wmhx  
       2020-11-02 14:24:29 +08:00
    腾讯会议, 莫某视频, 不都是这样的吗
    also24
        7
    also24  
       2020-11-02 14:46:00 +08:00
    需要多一步,blob 要先存储在本地。
    实际流程,类似 mega 网盘的下载过程。
    darknoll
        8
    darknoll  
    OP
       2020-11-02 15:11:01 +08:00
    @suke971219 可能你这个是唯一的方法了
    darknoll
        9
    darknoll  
    OP
       2020-11-02 15:13:28 +08:00
    @also24 前端把文件存储在本地,这就是个大问题,用户体验特别不好。首先存储的路径如果不想自己选,那只能存在浏览器默认下载路径,如果每次都手动选下载目录,体验更差。
    also24
        10
    also24  
       2020-11-02 15:26:02 +08:00
    @darknoll #9
    我举 mega 的例子,其实就是想说我觉得这样体验很一般 hhhh


    我还是比较赞成直接传递 URL 的方案。
    cheese
        11
    cheese  
       2020-11-02 17:33:13 +08:00
    不太行,还是参考豆瓣,知乎一类的,网页调用 app 方案吧
    xyjincan
        12
    xyjincan  
       2020-11-02 17:40:48 +08:00 via Android
    chrome 最新文件 api 支持文件和文件夹修改了
    KuroNekoFan
        13
    KuroNekoFan  
       2020-11-02 18:03:58 +08:00
    通过 url scheme 唤起第三方 app 问题不大,问题是如何传递文件路径。理论上浏览器和你家 APP 应该是隔离的,不过用常见的 c:/$USER/Downloads 来猜测一下文件路径,如果没有文件再让用户自选感觉是可行的方案
    edk24
        14
    edk24  
       2020-11-02 19:20:58 +08:00
    你可以参考迅雷 /旋风链接的形式, 但是在浏览器中, 除非奇葩的手段, 是不能用 js 往用户电脑上写文件的, 因为这会使得用户电脑很不安全, 比如我替换难道某些系统文件, 加 hook 给你写入病毒等

    所以,我个人推荐的方法是, 内部软件和后端上做个约定, 一串类似迅雷的链接唤起来, 在内部软件中下载 blob.

    如果 blob 小, 可以考虑用`协议://base64`替代, 但你要知道, 这种类型的 url 长度是有限的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2802 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:43 · PVG 11:43 · LAX 19:43 · JFK 22:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.