- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试在 Rails API 中设置一个简单的流程。业务逻辑已经实现并正常工作,但我在从包含 CSV 的参数中获取临时文件时遇到问题,该 CSV 将通过处理前端的 Ember 应用程序上传。这是我的 Controller 代码:
def update_by_csv
good_csv = CSV.read("spec/fixtures/single_field_lien_update_csv.csv")
bad_csv = CSV.read(params[:liens_csv].tempfile)
fields = good_csv.first
values = good_csv[1..-1]
update_data = values.map do |row|
lien = {}
row.each_with_index do |val, index|
lien[fields[index]] = val
end
lien
end.map(&:symbolize_keys)
liens = update_data.map { |lien_data| Lien.find(lien_data[:id]) }
if columns_updateable? fields
liens.each_with_index { |lien, i| lien.update(update_data[i]) }
require 'pry'; binding.pry
render json: liens, status: :accepted
else
# render_bad_request_for(liens)
end
end
这是相关的测试:
describe 'POST #update_by_csv' do
context 'when uploading a csv with lien ids' do
it 'can update fields via a csv' do
payload = { liens_csv: fixture_file_upload("single_field_lien_update_csv.csv", "text/csv") }
url = "http://api.lvh.me:3000/liens/update_by_csv.json"
post url, payload, @subscribed_headers
expect(response).to have_http_status(:accepted)
end
end
end
这是正在上传的 CSV:
id,face_value,county_held
1,954,butts
2,2054,butts
3,9054,butts
4,42954,butts
5,29054,butts1
当我尝试通过 CSV.read(params[:liens_csv].tempfile)
访问 CSV 时,我得到以下信息:
[["id", "face_value"],
["1", "10314"],
["2", "314931"],
["3", "42950"],
["4", "3295"],
["5", "31059"],
["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]]
然而,当它通过 CSV.read("spec/fixtures/single_field_lien_update_csv.csv")
访问时,我没有问题:
[["id", "face_value", "county_held"],
["1", "954", "butts"],
["2", "2054", "butts"],
["3", "9054", "butts"],
["4", "42954", "butts"],
["5", "29054", "butts1"]]
我不确定在临时文件/上传过程中到底是什么导致了这个问题。上传的文件与直接正确解析的文件完全相同。还可能值得注意的是,出于此测试的目的,CSV 是使用 Ruby 的 CSV 库生成的,因此我认为这不是该部分的编码问题。
想法?我真的很难过。
最佳答案
您能否将您的临时文件复制到您的 fixture 目录,然后尝试使用 ember 输出的完全相同的数据?
其实我能想到的唯一麻烦就是编码问题,\r\n 回车,utf-8/ansi 问题。
这就是我尝试修复它的方式:
def update_by_csv
good_csv = CSV.read("spec/fixtures/single_field_lien_update_csv.csv")
# Keep it for further informations
File.write(Rails.root.join("spec/fixtures/single_field_lien_update_csv_bad.csv"), File.read(params[:liens_csv].tempfile))
raise "STOP"
bad_csv = CSV.read(params[:liens_csv].tempfile)
#...
end
关于ruby-on-rails - Rails API : params' tempfile contains null bites from upload and fails to read, 但如果在本地抓取则读取正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33506511/
我在 Camel 中定义了一条路由,其内容如下:收到 GET 请求,在文件系统中创建一个文件。文件使用者接收它,从外部 Web 服务获取数据,并通过 POST 将结果消息发送到其他 Web 服务。 下
我尝试在 Rails API 中设置一个简单的流程。业务逻辑已经实现并正常工作,但我在从包含 CSV 的参数中获取临时文件时遇到问题,该 CSV 将通过处理前端的 Ember 应用程序上传。这是我的
我是一名优秀的程序员,十分优秀!