私はこれとしばらくの間戦ってきました、そしてあなたの助けは確かに大いに感謝するでしょう。
私はあなたがここで見つけることができるpdf文書に署名する方法を構築しました、そして今私のファイルに署名することからほんの一歩です。
これを非同期で実行したいのですが、最初に同期で実行する方法を理解する必要があります。
だから私は2つの異なるアプローチを試します、post_processの後:
after_post_process do |receipt|
if receipt.receipt_file_changed?
require 'aws-sdk'
logger.debug("RECEIPT ID: #{self.inspect}")
file = receipt.receipt_file.queued_for_write[:original]
s3=AWS::S3.new(
access_key_id: S3_CONFIG["access_key_id"],
secret_access_key: S3_CONFIG["secret_access_key"])
bucket_name = S3_CONFIG["bucket"]
b = s3.buckets[bucket_name]
filen = File.basename(file.path)
outputF = "original/teste.pdf"
o = b.objects[outputF]
o.write(file: file.path)
end
end
ここで、1が私のrecipient_idになるようなパスにファイルを送信できるようにしたかったのです/original/1/myfilename.pdf
(そしてpost_processの後の時点ではnullです)。
次に、after_saveを使用して別のアプローチを試しましたが、recipient_file.to_file(:original)は有効な呼び出しではありません...
after_save do |receipt|
if receipt.receipt_file_changed?
require 'aws-sdk'
logger.debug("RECEIPT ID: #{receipt.inspect}")
s3=AWS::S3.new(
access_key_id: S3_CONFIG["access_key_id"],
secret_access_key: S3_CONFIG["secret_access_key"])
bucket_name = S3_CONFIG["bucket"]
b = s3.buckets[bucket_name]
filen = File.basename(receipt_file_file_name)
outputF = "original/teste.pdf"
o = b.objects[outputF]
o.write(file: receipt.receipt_file.to_file(:original))
end
end
ファイルを取得してS3に再度アップロードするにはどうすればよいですか?
編集
いくつかの調査の後、 Amazonからファイルをロードする方法を読みましたが、問題はファイルの内容が空であるということです...何が間違っているのですか?
after_save do |receipt|
if receipt.receipt_file_changed?
require 'aws-sdk'
logger.debug("I was here inside after_save")
s3=AWS::S3.new(
access_key_id: S3_CONFIG["access_key_id"],
secret_access_key: S3_CONFIG["secret_access_key"])
bucket_name = S3_CONFIG["bucket"]
b = s3.buckets[bucket_name]
filen = File.basename(receipt_file_file_name)
logger.debug("Filename is #{filen}")
path = "original/#{receipt.id}/#{filen}"
o = b.objects[path]
require 'tempfile'
ext= File.extname(filen)
file = Tempfile.new([File.basename(filen,ext),ext], :encoding => 'ascii-8bit')
# streaming download from S3 to a file on disk
begin
o.read do |chunk|
file.write(chunk)
end
end
file.close
logger.debug("File is #{file.inspect}")
o.write(file: signPdf(file).path)
file.unlink
end
end