首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在用户编辑时添加头像

在用户编辑时添加头像
EN

Stack Overflow用户
提问于 2015-02-20 00:48:12
回答 1查看 255关注 0票数 1

我正在使用carrierwave direct将用户头像保存到S3。我已经启动并运行了示例应用程序,但不是在创建用户时保存头像,而是希望能够在编辑用户时添加头像。

我已经对化身控制器中的新方法做了这样的更改-

代码语言:javascript
复制
class AvatarsController < ApplicationController
  def new
    @user = User.find_by_id(params[:user_id])
    @uploader = @user.avatar
    @uploader.success_action_redirect = @user
  end
end

..。在link_to方法中将:user_id作为参数提交。

这让S3很不爽-

代码语言:javascript
复制
<Error>
<Code>InvalidPolicyDocument</Code>
<Message>Invalid Policy: Invalid JSON.</Message>
<RequestId>B1546F83A39ABF39</RequestId>
<HostId>
U5vaOy0bh+Zsgb3hKM24PNZvZ7+sh/ntJMJZUmcZ/5uQZIIfzxEDqeymHCO8JJ6w
</HostId>
</Error>

对于如何解决这个问题,有人有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-25 11:02:01

自从我开始使用carrierwave direct已经有一段时间了,但希望这能让你找到正确的方向。

首先,理解carrierwave direct在调用视图中的direct_upload_form_for时会为您生成一个POST policy

使用HTTP POST发出经过身份验证的请求所需的策略是以JavaScript Object Notation (JSON)编写的UTF-8和Base64编码文档,该文档指定了请求必须满足的条件。

因此,如果您想遵循代码,您会发现CarrierWaveDirect::ActionViewExtensions::FormHelper定义了direct_upload_form_for,它调用form_for,将CarrierWaveDirect::FormBuilder作为builder传递。

查看CarrierWaveDirect::FormBuilder,我们可以看到函数required_base_fields定义了包含在表单中的隐藏字段。我们特别感兴趣的是policy

policy的值来自CarrierWaveDirect::Uploader中的同名函数,该函数将其大部分工作委托给私有函数generate_policy。请注意,它创建的是Base64编码的JSON,完全符合POST策略的要求。

考虑到所有这些,您可以在视图中检查由direct_upload_form_for生成的HTML值,并获得名为policy的隐藏输入的值。然后,您可以对该值进行解码(可能使用rails控制台中的Base64.decode64 ),并得到人类可读的JSON。

有了原始的JSON,您现在可以将发送到s3的内容与POST策略的规范进行比较,并且在所有发送到S3的数据的上下文中,您应该能够进一步调试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28612039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档