Как загрузить pdf файлы на сервер с ajax без рельсов на ruby 2.4 - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть функция для отправки файла на сервер:

function _docs_submit() {
  event.preventDefault();
  upDOCS_btn.html("Uploading...");

  var files =  $("#upDOCS").prop('files'),
      formData = new FormData();

  for (var i = 0; i < files.length; i++) {
    var file = files[i];
    if (!file.type==='application/pdf') {
      continue;
    }

    formData.append('docs[]', file, file.name);
  }

  $.ajax({
    url: "medcon/adddocs",
    type: "POST",
    data: formData,
    contentType: false,
    processData: false,
    success: function (locks) {
      alert('Thank you.\nDocument(s) received.');
    },
    error: function(e) {
      alert("There was an error submitting your documents:\n" + e.responseText);
    }
  });
}

Как мне записать это в ruby и сохранить в pdf на сервере без использования rails и в Ruby 2.4 ?

post 'medcon/adddocs' do |params|
  theFile = params[:data] # need help here
  #save file to server - need help here especially
end

Я могу использовать драгоценные камни, если они совпадают с Ruby 2.4. Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Чтобы получить доступ к значениям параметров по ключу, используйте метки ti c. Вот решение, которое я выбрал, которое включает метод для создания файлового каталога, в котором он еще не существует. Для записи файла используйте file.open и wb для записи файла в двоичном режиме.

require 'fileutils'

def create_folder(path)
  unless File.directory?(path)
    FileUtils.mkdir_p(path)
  end
end

post 'medcon/adddocs' do |params, me|
 params = params['body']
   filename = params['data']['filename']
   fid = params['fid'].to_s
   file = Base64.decode64(params['data']['file_base64'])
   folder = "../data/medcon/fid#{fid}"

 create_folder folder # send folder path to create folder method

  File.open("#{folder}/#{filename}", 'wb') do |f|
    f.write(file)
  end

end
0 голосов
/ 03 апреля 2020

Для доступа к содержимому загруженного файла вы используете file_param[:tmpfile], и вы также можете получить доступ к исходному имени файла под file_param[:filename] (не уверен, если вы хотите использовать его повторно. Вооружившись этими знаниями, вы сможете обрабатывать загрузку с помощью что-то подобное (не проверено, по памяти):

post 'medcon/adddocs' do |params|
  files = param[:data][:docs] # or maybe string keys, I'm not sure
  files.each do |file|
    name = file[:filename]
    contents = file[:tmpfile].read
    File.open(File.join('/some/path', filename), 'wb') { |f| f.write(contents) }
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...