uploads: improve error messages.
Improve upload error messages when downloading an URL fails, or it isn't an image or video file.
This commit is contained in:
@@ -147,7 +147,7 @@ module Danbooru
|
|||||||
def download_media(url, file: Tempfile.new("danbooru-download-", binmode: true))
|
def download_media(url, file: Tempfile.new("danbooru-download-", binmode: true))
|
||||||
response = get(url)
|
response = get(url)
|
||||||
|
|
||||||
raise DownloadError, "Downloading #{response.uri} failed with code #{response.status}" if response.status != 200
|
raise DownloadError, "#{url} failed with code #{response.status}" if response.status != 200
|
||||||
raise FileTooLargeError, "File size too large (size: #{response.content_length.to_i.to_formatted_s(:human_size)}; max size: #{@max_size.to_formatted_s(:human_size)})" if @max_size && response.content_length.to_i > @max_size
|
raise FileTooLargeError, "File size too large (size: #{response.content_length.to_i.to_formatted_s(:human_size)}; max size: #{@max_size.to_formatted_s(:human_size)})" if @max_size && response.content_length.to_i > @max_size
|
||||||
|
|
||||||
size = 0
|
size = 0
|
||||||
|
|||||||
@@ -219,9 +219,7 @@ module Sources
|
|||||||
|
|
||||||
# Download the file at the given url, or at the main image url by default.
|
# Download the file at the given url, or at the main image url by default.
|
||||||
def download_file!(download_url = image_url)
|
def download_file!(download_url = image_url)
|
||||||
raise DownloadError, "Download failed: couldn't find download url for #{url}" if download_url.blank?
|
|
||||||
response, file = http_downloader.download_media(download_url)
|
response, file = http_downloader.download_media(download_url)
|
||||||
raise DownloadError, "Download failed: #{download_url} returned error #{response.status}" if response.status != 200
|
|
||||||
file
|
file
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class MediaAsset < ApplicationRecord
|
|||||||
}
|
}
|
||||||
|
|
||||||
validates :md5, uniqueness: { conditions: -> { where(status: [:processing, :active]) } }
|
validates :md5, uniqueness: { conditions: -> { where(status: [:processing, :active]) } }
|
||||||
validates :file_ext, inclusion: { in: %w[jpg png gif mp4 webm swf zip], message: "Not an image or video" }
|
validates :file_ext, inclusion: { in: %w[jpg png gif mp4 webm swf zip], message: "File is not an image or video" }
|
||||||
validates :file_size, numericality: { less_than_or_equal_to: Danbooru.config.max_file_size, message: ->(asset, _) { "too large (size: #{asset.file_size.to_formatted_s(:human_size)}; max size: #{Danbooru.config.max_file_size.to_formatted_s(:human_size)})" } }
|
validates :file_size, numericality: { less_than_or_equal_to: Danbooru.config.max_file_size, message: ->(asset, _) { "too large (size: #{asset.file_size.to_formatted_s(:human_size)}; max size: #{Danbooru.config.max_file_size.to_formatted_s(:human_size)})" } }
|
||||||
validates :duration, numericality: { less_than_or_equal_to: MAX_VIDEO_DURATION, message: "must be less than #{MAX_VIDEO_DURATION} seconds", allow_nil: true }, on: :create # XXX should allow admins to bypass
|
validates :duration, numericality: { less_than_or_equal_to: MAX_VIDEO_DURATION, message: "must be less than #{MAX_VIDEO_DURATION} seconds", allow_nil: true }, on: :create # XXX should allow admins to bypass
|
||||||
validate :validate_resolution, on: :create
|
validate :validate_resolution, on: :create
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
post_auth uploads_path(format: :json), @user, params: { upload: { file: file }}
|
post_auth uploads_path(format: :json), @user, params: { upload: { file: file }}
|
||||||
|
|
||||||
assert_response 201
|
assert_response 201
|
||||||
assert_match("Not an image or video", Upload.last.error)
|
assert_match("File is not an image or video", Upload.last.error)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "for a file larger than the file size limit" do
|
context "for a file larger than the file size limit" do
|
||||||
|
|||||||
Reference in New Issue
Block a user