uploads: allow uploading multiple files from your computer at once.
Allow uploading multiple files from your computer at once. The maximum limit is 100 files at once. There is still a 50MB size limit that applies to the whole upload. This limit is at the Nginx level. The upload widget no longer shows a thumbnail preview of the uploaded file. This is because there isn't room for it in a multi-file upload, and because the next page will show a preview anyway after the files are uploaded. Direct file uploads are processed synchronously, so they may be slow. API change: the `POST /uploads` endpoint now expects the param to be `upload[files][]`, not `upload[file]`.
This commit is contained in:
@@ -17,7 +17,7 @@ FactoryBot.define do
|
||||
status { "completed" }
|
||||
source { nil }
|
||||
media_asset_count { 1 }
|
||||
file { Rack::Test::UploadedFile.new("#{Rails.root}/test/files/test.jpg") }
|
||||
files { { "0" => Rack::Test::UploadedFile.new("#{Rails.root}/test/files/test.jpg") } }
|
||||
|
||||
upload_media_assets do
|
||||
[build(:upload_media_asset, media_asset: build(:media_asset, file: "test/files/test.jpg"), source_url: "file://test.jpg", status: "active")]
|
||||
|
||||
@@ -162,7 +162,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
||||
assert_no_difference("Upload.count") do
|
||||
file = File.open("test/files/test.jpg")
|
||||
source = "https://files.catbox.moe/om3tcw.webm"
|
||||
post_auth uploads_path(format: :json), @user, params: { upload: { file: file, source: source }}
|
||||
post_auth uploads_path(format: :json), @user, params: { upload: { files: { "0" => file }, source: source }}
|
||||
end
|
||||
|
||||
assert_response 422
|
||||
@@ -171,7 +171,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
||||
|
||||
should "fail if given an unsupported filetype" do
|
||||
file = Rack::Test::UploadedFile.new("test/files/ugoira.json")
|
||||
post_auth uploads_path(format: :json), @user, params: { upload: { file: file }}
|
||||
post_auth uploads_path(format: :json), @user, params: { upload: { files: { "0" => file } }}
|
||||
|
||||
assert_response 201
|
||||
assert_match("File is not an image or video", Upload.last.error)
|
||||
@@ -247,12 +247,9 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
||||
context "when re-uploading a media asset stuck in the 'processing' state" do
|
||||
should "mark the asset as failed" do
|
||||
asset = create(:media_asset, file: File.open("test/files/test.jpg"), status: "processing")
|
||||
file = Rack::Test::UploadedFile.new("test/files/test.jpg")
|
||||
create_upload!("test/files/test.jpg", user: @user)
|
||||
|
||||
post_auth uploads_path, @user, params: { upload: { file: file }}
|
||||
upload = Upload.last
|
||||
|
||||
assert_redirected_to upload
|
||||
assert_match("Upload failed, try again", upload.reload.error)
|
||||
assert_equal("failed", asset.reload.status)
|
||||
end
|
||||
@@ -287,6 +284,24 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
||||
# should_upload_successfully("test/files/compressed.swf")
|
||||
end
|
||||
|
||||
context "uploading multiple files from your computer" do
|
||||
should "work" do
|
||||
files = {
|
||||
"0" => Rack::Test::UploadedFile.new("test/files/test.jpg"),
|
||||
"1" => Rack::Test::UploadedFile.new("test/files/test.png"),
|
||||
"2" => Rack::Test::UploadedFile.new("test/files/test.gif"),
|
||||
}
|
||||
|
||||
post_auth uploads_path(format: :json), @user, params: { upload: { files: files }}
|
||||
|
||||
upload = Upload.last
|
||||
assert_response 201
|
||||
assert_equal("", upload.error.to_s)
|
||||
assert_equal("completed", upload.status)
|
||||
assert_equal(3, upload.media_asset_count)
|
||||
end
|
||||
end
|
||||
|
||||
context "uploading a file from a source" do
|
||||
should_upload_successfully("https://www.artstation.com/artwork/04XA4")
|
||||
should_upload_successfully("https://dantewontdie.artstation.com/projects/YZK5q")
|
||||
|
||||
@@ -7,7 +7,7 @@ module UploadTestHelper
|
||||
source = { source: source_or_file_path }
|
||||
else
|
||||
file = Rack::Test::UploadedFile.new(Rails.root.join(source_or_file_path))
|
||||
source = { file: file }
|
||||
source = { files: { "0" => file } }
|
||||
end
|
||||
|
||||
perform_enqueued_jobs do
|
||||
|
||||
Reference in New Issue
Block a user