Defect #35715 » 35715-v2.patch
| app/controllers/attachments_controller.rb | ||
|---|---|---|
| 105 | 105 |
return |
| 106 | 106 |
end |
| 107 | 107 | |
| 108 |
@attachment = Attachment.new(:file => request.body)
|
|
| 108 |
@attachment = Attachment.new(:file => raw_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 |
| ... | ... | |
| 303 | 303 |
def update_all_params |
| 304 | 304 |
params.permit(:attachments => [:filename, :description]).require(:attachments) |
| 305 | 305 |
end |
| 306 | ||
| 307 |
# Get an IO-like object for the request body which is usable to create a new |
|
| 308 |
# attachment. We try to avoid having to read the whole body into memory. |
|
| 309 |
def raw_request_body |
|
| 310 |
if request.body.respond_to?(:size) |
|
| 311 |
request.body |
|
| 312 |
else |
|
| 313 |
request.raw_post |
|
| 314 |
end |
|
| 315 |
end |
|
| 306 | 316 |
end |
| test/integration/api_test/attachments_test.rb | ||
|---|---|---|
| 272 | 272 |
assert_equal 12, attachment.filesize |
| 273 | 273 |
assert File.exist? attachment.diskfile |
| 274 | 274 |
end |
| 275 | ||
| 276 |
test "POST /uploads.json should be compatible with a uwsgi's input" do |
|
| 277 |
set_tmp_attachments_directory |
|
| 278 |
assert_difference 'Attachment.count' do |
|
| 279 |
request_body = Rack::RewindableInput.new(StringIO.new('File content'))
|
|
| 280 |
# Uwsgi_IO object does not have size method |
|
| 281 |
request_body.instance_eval('undef :size', __FILE__, __LINE__)
|
|
| 282 |
post( |
|
| 283 |
'/uploads.json', |
|
| 284 |
:headers => {
|
|
| 285 |
"CONTENT_TYPE" => 'application/octet-stream', |
|
| 286 |
"CONTENT_LENGTH" => '12', |
|
| 287 |
"rack.input" => request_body |
|
| 288 |
}.merge(credentials('jsmith'))
|
|
| 289 |
) |
|
| 290 |
assert_response :created |
|
| 291 |
end |
|
| 292 |
json = ActiveSupport::JSON.decode(response.body) |
|
| 293 |
assert_kind_of Hash, json['upload'] |
|
| 294 |
token = json['upload']['token'] |
|
| 295 |
assert token.present? |
|
| 296 |
assert attachment = Attachment.find_by_token(token) |
|
| 297 |
assert_equal 12, attachment.filesize |
|
| 298 |
assert File.exist? attachment.diskfile |
|
| 299 |
end |
|
| 275 | 300 |
end |
- « Previous
- 1
- 2
- Next »