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

2021-03-12 11:40:22 +08:00
 IVeverKB

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

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

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

<img src="..."/>

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

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

我觉得你真正需要的可能是开启 http2
julyclyde
2021-03-12 12:18:20 +08:00
https://www.thesitewizard.com/html-tutorial/embed-images-with-data-urls.shtml
用<img src=data 语法可以

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

前端能通过地址拿到图片就行
eason1874
2021-03-12 12:29:05 +08:00
这种情况一般用 JSON,分 title, excerpt, content, thumbnail,thumbnail 里的是图片文件链接。

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

一般情况下,建站时就要想好文件读取的权限和路径设置,避免上述麻烦事徒增虚耗
learningman
2021-03-12 12:30:53 +08:00
img 地址有防盗链不?有的话楼上说的都不行
rationa1cuzz
2021-03-12 13:25:11 +08:00
一般不会一起返回的,万一图片很大加载很慢的,我们看到的大部分网站都是内容图片分开请求,图片可以是个 url (静态资源),或者单独接口请求图片(字节 /base64 字符串)如果是<img src="..."/> 塞的建议也是路径( url ),而不是 base64 字符串(太大了)
izoabr
2021-03-18 14:46:59 +08:00
11L 正解

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

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

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

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

© 2021 V2EX