Почему S3 меняет тип контента моего CSV - PullRequest
0 голосов
/ 04 мая 2020

Я использую ruby на рельсах для генерации предопределенного URL, чтобы я мог загрузить файл CSV. Это работает отлично, я даже могу получить CSV, используя предварительно назначенный URL. Проблема в том, что когда я получаю файл CSV, в верхней части CSV появляется случайный блок текста.

------WebKitFormBoundaryrnmGKBwtkSrSvPUR
Content-Disposition: form-data; name="file"; filename="MOCK_DATA.csv"
Content-Type: application/octet-stream

id,first_name,last_name,email,gender,job_title,city,country
1,Emlyn,Dayce,edayce0@example.com,Male,Quality Control Specialist,Debrecen,Hungary

Поэтому, когда я пытаюсь выполнить l oop через CSV, используя следующий код:

require 'csv'
require 'open-uri'

csv = CSV.new(open(presigned_url), headers: false)

csv.each do |csv|
  puts csv.to_s
end

Я получаю следующую ошибку:

CSV::MalformedCSVError (Illegal quoting in line 2.):

, которая ссылается на строку:

csv.each do |csv| 

Любые решения по: как удалить этот блок текста перед циклом / во время анализа CSV. Или, что еще лучше, в первую очередь предотвращая добавление блока текста с использованием предварительно назначенных URL-адресов S3.

Примечание. Я пытался добавить

content_type: 'text/csv'

к предварительно заданному запросу, однако он не распознает параметр.

ПРОЦЕСС ЗАГРУЗКИ:

Я использую Vuejs для загрузки CSV на S3.

let formData = new FormData();
  formData.append("file", this.$refs.file.files[0], { contentType: 'text/csv' 
});

  this.axios
    .put(this.presigned_url, formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
    .then(response => {
      // Handle response
      if(response.status == 200){
        this.original_file_name = "Processing CSV..."
        this.processCsv();
      }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...