首页 > 解决方案 > 如何在 ActiveStorage Rails 5.2 实现中检索源文件名?

问题描述

尽管我在这里发现了同样的问题,但我可以上传文件,但我无法检索原始文件名。

从 BusinessObject 中,我创建了一个加载文件的 Scope:

app/views/scopes/_form.html.erb
<%= form_with model: [@business_object, @scope], html: {id: "edit_form"} do |f| %>
  <!-- apply template to Scope -->
  <%= render partial: "shared/object_definition_form", locals: {this_object: @scope, f: f} %>

  <!-- additional fields -->
  <div class="row">
    <div class="col-md-2 text-right"><%= t('FileUpload') %>:
    </div>
    <div class="col-md-10 field"><%= f.file_field :uploaded_file, class: "btn btn-primary" %>
    </div>
  </div>
  <%= f.submit "Validate" %>
<% end %>

范围控制器按预期附加文件,但它还应将文件名存储在 resource_file 字段中:

app/controllers/scopes_controller.rb
def update
    ### Scope retrieved by Callback function
    @scope.updated_by = current_login
    if params.has_key?(:uploaded_file)
      @scope.uploaded_file.purge
      @scope.uploaded_file.attach(params[:uploaded_file])
      @scope.resource_file = self.uploaded_file.blob.filename
    end

    respond_to do |format|
      if @scope.update_attributes(scope_params)
        format.html { redirect_to @scope, notice: 'Scope was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @scope.errors, status: :unprocessable_entity }
      end
    end
  end

我尝试了几种方法来获取原始文件名,但无法做到。任何想法 ?谢谢!

标签: ruby-on-railsrails-activestorage

解决方案


附加文件后,您可以通过以下方式检索原始文件名:

@scope.uploaded_file.filename

推荐阅读