gpt4 book ai didi

ruby-on-rails - Rails API : params' tempfile contains null bites from upload and fails to read, 但如果在本地抓取则读取正常

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:29 25 4
gpt4 key购买 nike

我尝试在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com