2013-08-03 6 views
1

업로드 된 파일에서 original_filename 및 기타 내용을 가져 오려고합니다.업로드 된 파일에서 데이터 가져 오기

뷰의 코드는 다음과 같습니다

<%= form_for(@datafile, url: user_data_files_path) do |f| %> 

    <%= f.file_field :data%> 

    <%= f.submit "Upload file", class: "btn btn-large btn-primary" %> 
<% end %> 

디버그 콘솔에서 PARAMS 값은 다음과 같습니다

{"utf8"=>"✓", 

"authenticity_token"=>"Z4suAyN3zOpz1qBKllaDs3L4flz6Rm6HnN0CIdJvmcE=", 

"data_file"=>{"data"=>#<ActionDispatch::Http::UploadedFile:0x007ff46b74e390 @tempfile=#<Tempfile:/var/folders/gf/lft827zj55b5wdj3208vpsy40000gn/T/RackMultipart20130803-635-q6wtb6>, 

@original_filename="application.html.erb", 

@content_type="application/octet-stream", 

@headers="Content-Disposition: form-data; name=\"data_file[data]\"; filename=\"application.html.erb\"\r\nContent-Type: application/octet-stream\r\n">}, 

"commit"=>"Upload file", 

"user_id"=>"1"} 

나는 나의 컨트롤러, original_filename 및 데이터 등을 검색하기 위해 노력하고있어 내가 가진 :

def create 

    @datafile = DataFile.new 

    uploaded_io = params[:data_file] 

    flash[:error]= '' + uploaded_io[:@original_filename] 


    redirect_to new_user_data_file_url 
    end 

하지만 오류가 발생합니다 : no implicit conversion of nil into String을 01,238,546,166에서행. 내가 통해 대한 액세스를 시도 :

uploaded_io[:original_filename] 
나에게 같은 오류를 제공

, 또는

uploaded_io.original_filename 

내가 NoMethodError를 얻을 내가 볼 이상한 것은 그렇게, flash[:error]= '' + uploaded_io.to_s이 나에게 data_file에 해시를 준다이다 .. 나는 무슨 일이 일어나고 있는지 이해하지 못한다.

누군가이 문제를 해결할 수 있도록 도와 줄 수 있습니까?

답변

2

나는이 파일에 params[:data_file]이 있다고 생각하는 데 오류가있는 것으로 나타났습니다. 파일은 params[:data_file][:data] (보기의 양식을보십시오)에 있고 그 파일에는 (가변 인스턴스) original_filename 메소드가 있습니다. 따라서 params[:data_file][:data].original_filename을 수행하면 파일 이름이 반환됩니다.

+0

매우 도움이됩니다. 감사합니다. – skwidbreth

관련 문제