Django 图片可以不作为文件下载的方式返回给前端吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
IVeverKB
V2EX    Django

Django 图片可以不作为文件下载的方式返回给前端吗

  •  
  •   IVeverKB 2021 年 3 月 12 日 2748 次点击
    这是一个创建于 1801 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个项目是前后端分离的,后端用的 Django 。现前端有个需求是一篇新闻稿需要 [标题+摘要+正文+一张图片] 这些内容。

    我现在只会以文件下载也就是 [ content-type="application/octet-stream"] 返图片给前端(这个方式添加不了其他额外的信息了,至少我不会),标题等其他文字内容通过另一个接口返给前端,这样获取一篇新闻稿就需要两次请求。问能不能只用一次的方式获得这些所有信息?

    另: 现在暂时有一个想法是,前端的

    <img src="..."/> 

    这种方式,我可以将 src 参数在返回标题摘要时一同给到前端。但这个 src 对于后端的请求方式或者实现本质是什么?是直接用 http get 方式请求这个 URL 吗,自己写了个简单 html 页面打开发现它并没有对我的后端发出请求,所以比较疑惑。。

    15 条回复    2021-03-18 14:46:59 +08:00
    debuggerx
        1
    debuggerx  
       2021 年 3 月 12 日
    现在这样才是合理的,想搞成一个接口返回信息和图片内容,看上去是减少了一次请求,实际上却是更浪费的。
    fankcoder
        2
    fankcoder  
       2021 年 3 月 12 日
    给他返回图片链接呀
    IVeverKB
        3
    IVeverKB  
    OP
       2021 年 3 月 12 日
    #1 @debuggerx ok 谢谢建议!
    #2 @fankcoder 小白问下怎么通过图片链接获取图片?有没有关键字我可以自己找了学一下。。图片链接相当于是自己写的一个 api 可以自定义获取对应图片,还是静态获取,还是。。(是不是说我的关于 img src 的想法是成立的?)
    Latin
        4
    Latin  
       2021 年 3 月 12 日
    Latin
        5
    Latin  
       2021 年 3 月 12 日
    const img= document.createElement('img');
    img.src = URL.createObjectURL(blob);
    superrichman
        6
    superrichman  
       2021 年 3 月 12 日 via iPhone
    把图片转成 base64 插到 img 标签的 src 里面,这样就只有一个请求了,缺点是图片大的话网页加载很慢。

    我觉得你真正需要的可能是开启 http2
    julyclyde
        7
    julyclyde  
       2021 年 3 月 12 日
    https://www.thesitewizard.com/html-tutorial/embed-images-with-data-urls.shtml
    用<img src=data 语法可以

    这绝对是 邪教!!
    ch2
        8
    ch2  
       2021 年 3 月 12 日
    img 标签可以加载源站的图片,不需要你亲自在后端下载一遍再从自己的服务器传给它
    Vegetable
        9
    Vegetable  
       2021 年 3 月 12 日
    当然可以,比如
    图片转成 base64 放到 json 里边 [不推荐]
    图片放在静态文件夹交给 nginx 处理,接口返回图片地址 [推荐]
    HashV2
        10
    HashV2  
       2021 年 3 月 12 日
    你返回的数据包含 img 地址就行了

    前端能通过地址拿到图片就行
    eason1874
        11
    eason1874  
       2021 年 3 月 12 日
    这种情况一般用 JSON,分 title, excerpt, content, thumbnail,thumbnail 里的是图片文件链接。

    对 API 服务器来说也算只有一个请求,因为图片走另外的文件服务器。如果只能走 API 服务器,你可以在接受 API 请求的用 http2 push 把图片一起推过去,这需要客户端支持。
    imn1
        12
    imn1  
       2021 年 3 月 12 日
    如果图片是入库的,就是字节数据,转 base64 随文章一起发过去
    如果图片是文件方式保存的,路径读取权限是所有人,发路径过去就行;如果权限并非所有人,或者不想公开真实路径,这就要换思路了,可以读取后按 base64 发,或者用不占 io 的方式在 web 路径做个映射,然后发这个路径

    一般情况下,建站时就要想好文件读取的权限和路径设置,避免上述麻烦事徒增虚耗
    learningman
        13
    learningman  
       2021 年 3 月 12 日
    img 地址有防盗链不?有的话楼上说的都不行
    rationa1cuzz
        14
    rationa1cuzz  
       2021 年 3 月 12 日
    一般不会一起返回的,万一图片很大加载很慢的,我们看到的大部分网站都是内容图片分开请求,图片可以是个 url (静态资源),或者单独接口请求图片(字节 /base64 字符串)如果是<img src="..."/> 塞的建议也是路径( url ),而不是 base64 字符串(太大了)
    izoabr
        15
    izoabr  
       2021 年 3 月 18 日
    11L 正解
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     730 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:28 PVG 06:28 LAX 14:28 JFK 17:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86