Нежелательные символы появляются в имени загруженного документа - PullRequest
0 голосов
/ 10 марта 2020

Я создаю PDF с использованием драгоценного камня WickedPDF, но проблема, с которой я сталкиваюсь, заключается в том, что создаваемый документ имеет имя документа Document20200309-48764-1o1nyyu.pdf, но имя документа должно быть Document.pdf. Я не уверен, почему я получаю символы после документа. Пожалуйста, помогите мне решить эту проблему.

pdf_file = WickedPdf.new.pdf_from_string(
        render_to_string(template: 'documents/document.pdf.erb',  locals: { payments: @payments }),
        formats: :html,
        encoding: "utf8",
        )

    if pdf_file.present?
      tempfile = Tempfile.new(["Document", '.pdf'], Rails.root.join('tmp'))
      tempfile.binmode
      tempfile.write pdf_file
      tempfile.close     
      tempfile.unlink
    end

Обновление

  path = "Documents"
  dir = File.dirname(path)
  unless File.directory?(dir)
    FileUtils.mkdir_p(dir)
  end
  path << ".pdf"
  file = File.new(path, 'w')
  file.write pdf_file
  @money.money_receipt = File.open(path)
  @money.save
  file.close
  file.unlink

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Tempfile использует первый аргумент в качестве префикса к сгенерированному имени файла. Он добавляет дополнительные символы для обеспечения уникального имени файла.

Если вы хотите указать c имя файла, попробуйте использовать обычные методы записи файлов. Тем не менее, вы несете ответственность за отсоединение файла после этого, за исключением случаев, когда файлы Tempfile не связаны, когда объект Tempfile собирается мусором.

0 голосов
/ 10 марта 2020

Вы создали путь с идентификатором документа path = "Documents-#{@document.id}".

Затем вы добавили .pdf в конец переменной пути, а затем используете его для создания имени файла

path << ".pdf"
file = File.new(path, 'w')

Если вы напишите file = File.new("Document.pdf"), будет сгенерировано правильное имя

...