Browse Source

Merged r20993 from trunk to 4.2-stable (#33752).


git-svn-id: http://svn.redmine.org/redmine/branches/4.2-stable@20994 e93f8b46-1217-0410-a6f0-8f06a7374b81
tags/4.2.2
Go MAEDA 3 years ago
parent
commit
5b730aa631

+ 1
- 1
app/controllers/attachments_controller.rb View File

@@ -105,7 +105,7 @@ class AttachmentsController < ApplicationController
return
end

@attachment = Attachment.new(:file => request.raw_post)
@attachment = Attachment.new(:file => request.body)
@attachment.author = User.current
@attachment.filename = params[:filename].presence || Redmine::Utils.random_hex(16)
@attachment.content_type = params[:content_type].presence

+ 14
- 0
config/initializers/10-patches.rb View File

@@ -213,3 +213,17 @@ module ActionView
end
end
end

# https://github.com/rack/rack/pull/1703
# TODO: remove this when Rack is updated to 3.0.0
require 'rack'
module Rack
class RewindableInput
unless method_defined?(:size)
def size
make_rewindable unless @rewindable_io
@rewindable_io.size
end
end
end
end

+ 22
- 0
test/integration/api_test/attachments_test.rb View File

@@ -250,4 +250,26 @@ class Redmine::ApiTest::AttachmentsTest < Redmine::ApiTest::Base
assert attachment.digest.present?
assert File.exist? attachment.diskfile
end

test "POST /uploads.json should be compatible with an fcgi's input" do
set_tmp_attachments_directory
assert_difference 'Attachment.count' do
post(
'/uploads.json',
:headers => {
"CONTENT_TYPE" => 'application/octet-stream',
"CONTENT_LENGTH" => '12',
"rack.input" => Rack::RewindableInput.new(StringIO.new('File content'))
}.merge(credentials('jsmith'))
)
assert_response :created
end
json = ActiveSupport::JSON.decode(response.body)
assert_kind_of Hash, json['upload']
token = json['upload']['token']
assert token.present?
assert attachment = Attachment.find_by_token(token)
assert_equal 12, attachment.filesize
assert File.exist? attachment.diskfile
end
end

Loading…
Cancel
Save