2011-02-14 15 views
10

अपलोड मैं एक फ़ाइल अपलोड करने की कोशिश कर रहा हूँ और मैं निम्नलिखित त्रुटि हो रही है:रूबी ऑन रेल्स फ़ाइल समस्या अजीब UTF8 रूपांतरण त्रुटि

"\xFF" from ASCII-8BIT to UTF-8 

मैं बहुत ज्यादा वे क्या कर रहे में रेल गाइड अनुसरण कर रही हूं। यहां वह कोड है जिसका मैं उपयोग कर रहा हूं।

file = params[:uploaded_file] 

File.open(Rails.root.join('public', 'images', file.original_filename), 'w') do |f| 
    f.write(file.read) 
end 

मुझे नहीं पता कि यह क्यों काम नहीं करता है। मैं क्या गलत कर रहा हूं?

अपडेट - यहाँ आवेदन ट्रेस

app/controllers/shows_controller.rb:16:in `write' 
app/controllers/shows_controller.rb:16:in `block in create' 
app/controllers/shows_controller.rb:15:in `open' 
app/controllers/shows_controller.rb:15:in `create' 

उत्तर

33

है मेरा मानना ​​है कि यह कैसे रूबी 1.9 के साथ 3 काम करता है रेल में एक परिवर्तन है, के बाद से 1.9 एन्कोडिंग का समर्थन करता है यह आप जो कुछ भी एन्कोडिंग के लिए सभी स्ट्रिंग्स परिवर्तित करने का प्रयास करेंगे अपने ऐप कॉन्फ़िगरेशन (application.rb) में सेट करें, आमतौर पर यह 'utf-8' है।

एन्कोडिंग समस्या से बचने के द्विआधारी मोड में फ़ाइल खोलते हैं, तो अपने मोड द्विआधारी लिखने योग्य के लिए 'पश्चिम बंगाल' होगा:

File.open(Rails.root.join('public', 'images', file.original_filename), 'wb') do |f| 
    f.write(file.read) 
end 
+2

मैंने गाइड में इसे सही करने के लिए एक पुल अनुरोध बनाया है। फिंगर्स पार हो गया :) https://github.com/rails/rails/pull/11910 –

1

मैं बाइनरी फ़ाइलें और अपने समाधान को अपलोड करने के साथ इसी तरह इस मुद्दे को अजीब काम नहीं किया था , लेकिन यह एक था, तो यहां किसी और के लिए यह समस्या है

file.tempfile.binmode 

फ़ाइल.ओपेन से पहले इस पंक्ति को डालें। I सोचें कारण यह है कि अस्थायी फ़ाइल स्वचालित रूप से अपलोड होने के बाद गैर-बाइनरी मोड में खोला जाता है, और यह लाइन इसे बाइनरी पर स्विच करती है, इसलिए रेल कोई भी स्वचालित रूपांतरण (जो बाइनरी फ़ाइल के मामले में बकवास नहीं है) का प्रयास नहीं करता है।

0
dst_path = Rails.root.join('public', 'images', file.original_filename) 
src_path = params[:uploaded_file].path 
IO.copy_stream(src_path, dst_path) # http://ruby-doc.org/core-1.9.2/IO.html#method-c-copy_stream 
संबंधित मुद्दे