mirror of
https://github.com/meineerde/redmine.git
synced 2026-02-05 00:23:24 +00:00
Uploading a big file fails with NoMemoryError (#33752).
Patch by Karel Pičman and Pavel Rosický. git-svn-id: http://svn.redmine.org/redmine/trunk@20993 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
49e323ae7a
commit
6369d139dd
@ -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
|
||||
|
||||
@ -215,3 +215,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
|
||||
|
||||
@ -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…
x
Reference in New Issue
Block a user