Rails AWS S3 iphoneでファイルをアップロードする際にpdfファイルが0Bになってしまう
- 評価
- クリップ 0
- VIEW 407
いつもお世話になっております。
現在Ralisでwebページを作成しております。
AWS上でRails + Nginxでシステム運用しており、ファイルのアップロードはCarrierwave、アップロード先はAWSのS3を用いております。
データベースはRDSを使用しています。
以下のように、input fileに画像、動画、pdfをそれぞれ入力し、S3上にアップロードするというシンプルな仕組みを作っております。
アップロード後のS3の中を見てみると、画像、動画は問題なくアップロードされるのですが、「pdfファイルのみ」0Bとなり、ファイルも開けない状態となることがあります。
この現象は現状、確認している範囲では「iphoneのsafariブラウザのみ」で起こっております。
原因は分からないのですが、input fileでファイルを選択後一定時間(5分程度?)経った後にsubmitすると起こる可能性が高いように思えます。
input fileでファイルを選択後、時間をほとんど置かずにsubmitすれば起こりません。
windowsのchromeや、Macのsafariではこの現象は確認できませんでした。
どういった原因が考えられますでしょうか。
参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。
よろしくお願いいたします。
環境
Amazon Linux release 2 (Karoo)
Rails 5.2.3
Ruby version: 2.6.1
RDS
ELB
S3
# show.html.erb
<%= form_with(model: @user_info, url: "/entry", local: true, html: {id: 'xx', class: 'yy'}) do |f| %>
#
# 省略
#
<%= f.file_field :movie, class: 'movie_file' %>
<%= f.file_field :image, class: 'image_file' %>
<%= f.file_field :pdf, class: 'pdf_file' %>
#
# 省略
#
<% end %>
# model/user.rb
class User < ApplicationRecord
mount_uploader :movie, ImageUploader
mount_uploader :image, ImageUploader
mount_uploader :pdf, ImageUploader
end
# uploaders./mage_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
# storage :file
storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
# "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
"uploads"
end
# 画像の場合のみ処理
process :fix_exif_rotation, if: :is_thumb?
def fix_exif_rotation
manipulate! do |img|
img.auto_orient
img = yield(img) if block_given?
img
end
end
def extension_whitelist
%w(jpg jpeg png mp4 mov pdf)
end
def filename
if original_filename.present?
base = File.basename(original_filename, '.*')
ext = File.extname(original_filename).downcase
base.gsub!(".","_")
end
# binding.pry
if mounted_as == :logo
type_name = 'logo'
elsif mounted_as == :movie
type_name = 'movie'
elsif mounted_as == :company_profile
type_name = 'pdf'
end
# binding.pry
"#{model.id}_#{Time.zone.now.strftime('%Y%m%d')}_#{type_name}#{ext}" if original_filename.present?
end
def is_thumb? picture
picture.content_type.include?("image/")
end
end
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.21%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる