Ruby on rails 如何使用carrierwave从rails api获取文件?

Ruby on rails 如何使用carrierwave从rails api获取文件?,ruby-on-rails,carrierwave,rails-api,Ruby On Rails,Carrierwave,Rails Api,我有一个rails api项目,它提供了访问我的数据的api 我使用carrierwave来存储我的文件,我的模型名为User,文件属性名为image 因此,image属性包含文件名、url和一些其他信息 为了通过api转换文件,我添加了gemcarrierwave-base64 我了解上传过程。客户端应用程序将文件编码为base64 code,然后通过json消息发送到后端。例如: {user: {email: "test@email.com", image: "data:image/jpg;

我有一个rails api项目,它提供了访问我的数据的api

我使用carrierwave来存储我的文件,我的模型名为
User
,文件属性名为
image

因此,image属性包含
文件名
url
和一些其他信息

为了通过api转换文件,我添加了gem
carrierwave-base64

我了解上传过程。客户端应用程序将文件编码为
base64 code
,然后通过json消息发送到后端。例如:

{user: {email: "test@email.com", image: "data:image/jpg;base64,#{base64_image}"}
因此,当后端接收到json请求时,carrierwave将把base64代码解析为一个文件,并将其存储到本地或S3

我不明白的是
下载过程:

当我请求用户信息时,我假设图像文件将作为json消息中的
base64代码
传输,然后客户端应用程序将
base64代码
编码为文件(图像),然后显示

但实际上,我可以为json数据提供的是文件url,而不是base64代码

我希望从api服务器获取文件(图像)的原因是我不希望客户端应用程序通过url直接访问s3。因此,每当客户端应用程序想要获取文件时,它都会请求api服务器,api服务器将获取文件并传输到客户端

有人能解释如何下载吗

或者,如果我被认为采取了错误的策略,我需要另一个api端点来响应文件对象,而不仅仅是伴随着用户模型


干杯。

限制访问存储在Amazon S3上的对象

https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3

您在上传方面做了一件好事,但在下载时,您需要发送URL no base64及其传统版本 此外,出于安全目的,您可以在上载时将公共读取权限放在s3上,并为您的客户端使用过期url(60,:thumb)


在此URL中,您指定的限制访问存储在Amazon S3上的对象的时间将过期

https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3

您在上传方面做了一件好事,但在下载时,您需要发送URL no base64及其传统版本 此外,出于安全目的,您可以在上载时将公共读取权限放在s3上,并为您的客户端使用过期url(60,:thumb)


在这个URL中,按照您指定的时间过期

您在上传时做了一件好事,但在下载时您需要发送URL no base64,这就是我在项目中所做的,它的传统和好方法是在上传时将读取公共权限放在s3上,并使用过期的URL(60,:thumb)对于你的客户来说,上传是件好事,但下载时你需要发送URL no base64,这就是我在我的项目中所做的,它的传统好方法是在上传时将读取公共权限放在s3上,并为你的客户使用过期的URL(60,:thumb)