所以,我正在构建一个使用RESTful API作为后端的Android应用程序。打算将API用作未来网站的数据源,也可能是IOS应用程序。
api基于Spring Boot构建并在Heroku上运行。
我正在尝试为我的应用程序找出从谷歌云存储中提供图像的正确方法,但我很困惑。
我为用户实体提供数据库表,其中包含电子邮件,姓名等列,其中一列应该包含其个人资料图片的URI。
我很担心如何以适当的方式从这一点开始做事。我已将我的想法归结为此,但存在一些问题:
上传图片:
用户使用.jpg有效负载向users/{id}/profilepic
发出POST请求。然后,服务器将图像(在可能的验证/认证之后)上传到谷歌云存储,获取图像的URL并将其存储在数据库列中。
检索图片:
用户向ip
发出GET请求。服务器在数据库中查找其配置文件图片的URI,使其自己请求URI以检索图像,并将图像作为.jpg文件返回给用户(编码如何?)。
问题 - 中间人效率低下和身份验证/访问控制 - 这似乎有点多余(并且可能很慢)服务器在这里成为一个中间人,但我确实看到了优势。另一种方法是将前端(应用程序,网站等)发送到图像并允许前端自己检索它,但这意味着我无法控制谁可以访问图像。
这是一个好模特吗?我如何在代码中实现它?有没有涵盖这个的教程?
答案 0 :(得分:1)
你的方法似乎很好。有更有效的选择,但你必须在安全性,RESTfulness等之间进行权衡。下面是另一种方法,它有一些不同的优点和缺点:
上传:客户端将从服务器请求上传个人资料照片的权限(POST给用户/ {id} / upload_profilepic)。然后,服务器会签署一个Google云端存储网址,用于上传该图片并将其交给用户,然后用户将图片直接上传到GCS。
下载:客户会意识到GCS资源(可能是公开的)具有众所周知的模式(https://storage.googleapis.com/bucketname/users/ {id} /profilepic.jpg)并直接请求它们。
答案 1 :(得分:0)
自您发布此问题以来已经有很长时间了,但我也是这样问我。 您要怎么解决?您是使用后端的Man坚持使用Man来检索和提供图像,还是找到了一种从前端直接获取它们而又没有安全问题的方法?
感谢您的回答