0

Shrine アップローダー gem を介して xls ファイル (Libreoffice) をアップロードしたいのですが、 File type must be one ..(There are mime types here in my initializers/shrine.rb ) のようなロールバック エラーが発生します。ここに私の神社があります。 .rb

 require "shrine"
require "shrine/storage/s3"

s3_options = {
  bucket:            "#{Rails.application.secrets[:aws_bucket_name]}",
  access_key_id:     "#{Rails.application.secrets[:aws_access_key_id]}",
  secret_access_key: "#{Rails.application.secrets[:aws_secret_access_key]}",
  region:            "#{Rails.application.secrets[:aws_region_name]}"
}

Shrine.storages = {
  cache: Shrine::Storage::S3.new(prefix: "cache", **s3_options),
  store: Shrine::Storage::S3.new(prefix: "store", **s3_options),
  #public_store: Shrine::Storage::S3.new(public: true, upload_options: { cache_control: "max-age=15552000" }, **s3_options)
}

Shrine.plugin :activerecord
Shrine.plugin :instrumentation
Shrine.plugin :determine_mime_type, analyzer: :marcel
Shrine.plugin :cached_attachment_data
Shrine.plugin :restore_cached_data

Shrine.plugin :presign_endpoint, presign_options: -> (request) {
  # Uppy will send the "filename" and "type" query parameters
  filename = request.params["filename"]
  type     = request.params["type"]

  {
    content_disposition:    ContentDisposition.inline(filename), # set download filename
    content_type:           type,                                # set content type (required if using DigitalOcean Spaces)
    content_length_range:   0..(10*1024*1024),                   # limit upload size to 10 MB
  }
}

Shrine.plugin :derivation_endpoint,
  secret_key: "secret",
  download_errors: [defined?(Shrine::Storage::S3) ? Aws::S3::Errors::NotFound : Errno::ENOENT]

そして、ここに私の Shrine_uploader.rb があります

class ShrineUploader < Shrine

  plugin :processing
  plugin :validation_helpers # to validate image data
  plugin :versions
  plugin :add_metadata
  plugin :delete_raw
  plugin :recache
  plugin :default_storage, cache: :cache, store: :store

  Attacher.validate do
    validate_max_size 10.megabyte
    validate_mime_type_inclusion ['image/jpg', 'image/jpeg', 'image/png', 'image/gif','image/tiff', 'application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd-xls']
  end

  def generate_location(io, context)
    #type  = context[:record].class.name.downcase if context[:record]
    type  = context[:record].patron_id if context[:record]
    style = context[:version] if context[:version]
    name  = super # the default unique identifier[type, style, name].compact.join("/")
  end
end

xlsx ファイルをアップロードできますが、MIME タイプが application/vnd.ms-excel であっても xls ファイルをアップロードできない理由がわかりません。

ご協力いただきありがとうございます。

4

3 に答える 3

0

こんにちは、古い投稿であることは知っていますが、XLS ファイルの解決策を見つけたのは次のとおりです。

はい、サポートする xls ファイルに「application/vnd.ms-excel」を追加しても、条件が「validate_mime_type_inclusion」の場合、アップロードに失敗します。

それを修正するために、次のコード「application/x-ole-storage」を追加しました。

  MIME_TYPES = [
    "application/msword",
    "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
    "application/vnd.ms-excel",
    "application/x-ole-storage",
    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
    ]

 Attacher.validate do
      validate_mime_type_inclusion MIME_TYPES
  end
于 2021-09-22T02:54:24.017 に答える