8

在我的模型中,我使用回形针将头像附加到我的用户身上:

has_attached_file :avatar, 
    :styles => {square_tiny: '50x50#', square_small: '100x100#', square: '200x200#'}

我有一个表格

<%= form_for(@user_profile, 
        :url => { :controller => :user_profiles, :action => :update_general_info, :id => @user_profile.id }, 
            :html => {  :multipart => true, 
                :class=> "form-horizontal" }) do |f| %>

            <div class="control-group">
              <%= f.label :avatar, :class => "control-label" %>
                <div class="controls">
                    <%= f.file_field :avatar  %>
                </div>
            </div>

....

<% end %>

上传完美,但我回来编辑我的用户,文件字段显示“未选择文件”。而且由于我正在验证该头像的存在,因此每次用户编辑他的详细信息时,他都必须再次上传他的头像......

我该如何解决这个问题?

我认为这:multipart => true会有所帮助,但它没有。

4

1 回答 1

6

页面绝对没有为文件字段设置值的好方法,这是出于安全原因。

如果浏览器允许页面或 JS 脚本为文件字段设置值,这将允许恶意页面使用某些系统或密码文件预设文件字段值。这将是一个巨大的安全漏洞。

在这种情况下,我所做的是将已保存的文件显示为用户可以单击下载的链接。然后,您可以提供要删除的少量 AJAX 链接(使用 AJAX 调用删除文件并将链接替换为新的文件输入)和替换(将链接替换为文件输入)。

您的最后一个选择是使用 AJAX 上传文件。如果您使用 AJAX 进行文件上传,您将 POST 到隐藏框架,因此文件输入将保持其选定的值。无论哪种方式,请记住,对文件字段值的任何更改都必须由用户发起。

于 2013-03-28T12:59:24.823 回答