Project

General

Profile

Defect #33752 » 33752.patch

patch by Karel Pičman and Pavel Rosický - Go MAEDA, 2021-05-08 09:56

View differences:

app/controllers/attachments_controller.rb
105 105
      return
106 106
    end
107 107

  
108
    @attachment = Attachment.new(:file => request.raw_post)
108
    @attachment = Attachment.new(:file => request.body)
109 109
    @attachment.author = User.current
110 110
    @attachment.filename = params[:filename].presence || Redmine::Utils.random_hex(16)
111 111
    @attachment.content_type = params[:content_type].presence
config/initializers/10-patches.rb
215 215
    end
216 216
  end
217 217
end
218

  
219
# https://github.com/rack/rack/pull/1703
220
# TODO: remove this when Rack is updated to 3.0.0
221
require 'rack'
222
module Rack
223
  class RewindableInput
224
    unless method_defined?(:size)
225
      def size
226
        make_rewindable unless @rewindable_io
227
        @rewindable_io.size
228
      end
229
    end
230
  end
231
end
test/integration/api_test/attachments_test.rb
250 250
    assert attachment.digest.present?
251 251
    assert File.exist? attachment.diskfile
252 252
  end
253

  
254
  test "POST /uploads.json should be compatible with an fcgi's input" do
255
    set_tmp_attachments_directory
256
    assert_difference 'Attachment.count' do
257
      post(
258
        '/uploads.json',
259
        :headers => {
260
          "CONTENT_TYPE" => 'application/octet-stream',
261
          "CONTENT_LENGTH" => '12',
262
          "rack.input" => Rack::RewindableInput.new(StringIO.new('File content'))
263
        }.merge(credentials('jsmith'))
264
      )
265
      assert_response :created
266
    end
267
    json = ActiveSupport::JSON.decode(response.body)
268
    assert_kind_of Hash, json['upload']
269
    token = json['upload']['token']
270
    assert token.present?
271
    assert attachment = Attachment.find_by_token(token)
272
    assert_equal 12, attachment.filesize
273
    assert File.exist? attachment.diskfile
274
  end
253 275
end
(5-5/5)