[RUBY-ON-RAILS] 어떻게 데이터베이스에 저장하지 않고, 사용자 업로드 된 파일을 읽기
RUBY-ON-RAILS어떻게 데이터베이스에 저장하지 않고, 사용자 업로드 된 파일을 읽기
나는 (이하 100킬로바이트 이상) 사용자에 의해 업로드 된 XML 파일을 읽을 수 있지만 데이터베이스에 해당 파일 저장 첫째로하지 수 있도록하고 싶습니다. 나는 현재의 액션 과거 해당 파일을 필요가 없습니다 (그 내용은 구문 분석하고 데이터베이스에 추가됩니다하지만, 파일을 구문 분석하는 것은 문제가되지 않습니다). 이후 로컬 파일을 읽을 수 있습니다 :
File.read("export.opml")
다음에 그것을 읽으려고, uploaded_file : 난 그냥위한 file_field를 만드는 방법에 대해 생각
File.read(params[:uploaded_file])
그러나 않는 모두가 형식 오류를 (문자열로 HashWithIndifferentAccess을 변환 할 수 없습니다) 던질 것입니다. 난 정말 (물론 / tmp를 디렉토리에서 읽기를 포함한) 다양한 많은 것들을 시도하지만 작업에 그들 중 누구도를 얻을 수 있습니다.
내 질문의 간결함은 내가 내 자신에이 문제를 해결하려고 준 노력을 마스크하지 않는 희망,하지만 난 그것을 수행하는 방법에하지의 백 가지 방법으로이 문제를 오염 싶지 않았다. 에 차임 사람에게 큰 감사를드립니다.
여기 내도이다 :
<% form_for(:uploaded_file, @feed, :url => {:action=>'parse'}, :html=> {:multipart=>true}) do |f| %> <p>
<%= f.label :uploaded_file, 'Upload your file.' %><br />
<%= f.file_field :uploaded_file %>
</p>
<p><%= f.submit 'upload' %></p>
<% end %>
내가 제출 한 후, 처리를 위해 다른 사용자 지정 작업 (구문 분석)에 오프 전달되는 file_field 업로드를 처리하는 사용자 지정 작업 (업로드)를 설정합니다. 이 내 문제의 일부가 될 수 있을까?
해결법
-
==============================
1.당신은 매우 가깝습니다. [: uploaded_file] PARAMS의 클래스 유형을 확인 - 이미 파일의 역할을하고, 각각의 읽기 방법 (들)을 사용하여 읽을 수 있습니다 둘, 그것은 일반적으로 StringIO 또는 임시 파일 객체가 될 것이다.
당신은 매우 가깝습니다. [: uploaded_file] PARAMS의 클래스 유형을 확인 - 이미 파일의 역할을하고, 각각의 읽기 방법 (들)을 사용하여 읽을 수 있습니다 둘, 그것은 일반적으로 StringIO 또는 임시 파일 객체가 될 것이다.
그냥 확실하게 (PARAMS의 클래스 유형 [: uploaded_file] 당신이 등 잡종, 승객,에 WEBrick을 사용하는지에 따라 다를 수 있음)이 약간 더 철저한 시도 할 수 있습니다 :
# Note: use form validation to ensure that # params[:uploaded_file] is not null file_data = params[:uploaded_file] if file_data.respond_to?(:read) xml_contents = file_data.read elsif file_data.respond_to?(:path) xml_contents = File.read(file_data.path) else logger.error "Bad file_data: #{file_data.class.name}: #{file_data.inspect}" end
[: uploaded_file, 귀하의 경우, 그것은 PARAMS이 밝혀 경우 해시가 있는지 확인보기에 file_field를 호출 할 때 당신은 mistakingly OBJECT_NAME 및 방법 매개 변수를 뒤집어하지 않았는지, 또는 서버가 당신에게 해시를 제공하지 않습니다 같은 키 : (.이 경우 development.log 파일 / production.log에서 나쁜 file_data이 게시물에 덧글 ... 출력을하시기 바랍니다) CONTENT_TYPE 등
-
==============================
2.나는 YAML 파일을 읽을 필요가있다. 나는 remotipart 여기에 코드를 사용 :
나는 YAML 파일을 읽을 필요가있다. 나는 remotipart 여기에 코드를 사용 :
html.slim에서
=form_tag('/locations/check_for_import', method: :post, remote: true, multipart: true)
...
<input id="uploadInput" type="file" name="uploadInput">
컨트롤러
content = File.read(params[:uploadInput].tempfile) doc = YAML.load(content)
from https://stackoverflow.com/questions/2521053/how-to-read-a-user-uploaded-file-without-saving-it-to-the-database by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 결합 모델의 체크 박스와 추가 필드와 양식을 통해 has_many 레일 (0) | 2020.02.24 |
---|---|
[RUBY-ON-RAILS] 어떻게 루비 온 레일즈 액티브 레코드 상속을 구현하는 방법? (0) | 2020.02.24 |
[RUBY-ON-RAILS] 부하에 해당 파일 -의 readline (0) | 2020.02.24 |
[RUBY-ON-RAILS] 4, 레일 방법을 올바르게 구성 SMTP 설정 (Gmail은) (0) | 2020.02.24 |
[RUBY-ON-RAILS] 레일 응용 프로그램에서 사용하지 않는 코드 찾기 (0) | 2020.02.24 |