diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 29e1150b0b3..923f6240785 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -4,7 +4,7 @@ class UploadsController < ApplicationController def create type = params.require(:type) - file = params[:file] || params[:files].first + file = params[:file] || params[:files].try(:first) url = params[:url] client_id = params[:client_id] synchronous = is_api? && params[:synchronous] @@ -52,7 +52,7 @@ class UploadsController < ApplicationController # API can provide a URL if file.nil? && url.present? && is_api? tempfile = FileHelper.download(url, SiteSetting.max_image_size_kb.kilobytes, "discourse-upload-#{type}") rescue nil - filename = File.basename(URI.parse(file).path) + filename = File.basename(URI.parse(url).path) else tempfile = file.tempfile filename = file.original_filename diff --git a/spec/controllers/uploads_controller_spec.rb b/spec/controllers/uploads_controller_spec.rb index a29fafd8150..a738489d9d9 100644 --- a/spec/controllers/uploads_controller_spec.rb +++ b/spec/controllers/uploads_controller_spec.rb @@ -53,6 +53,22 @@ describe UploadsController do expect(message.data).to be end + it 'is successful with synchronous api' do + SiteSetting.stubs(:authorized_extensions).returns("*") + controller.stubs(:is_api?).returns(true) + + Jobs.expects(:enqueue).with(:create_thumbnails, anything) + + FakeWeb.register_uri(:get, "http://example.com/image.png", :body => File.read('spec/fixtures/images/logo.png')) + + xhr :post, :create, url: 'http://example.com/image.png', type: "avatar", synchronous: true + + json = ::JSON.parse(response.body) + + expect(response.status).to eq 200 + expect(json["id"]).to be + end + it 'correctly sets retain_hours for admins' do Jobs.expects(:enqueue).with(:create_thumbnails, anything)