]> source.dussan.org Git - redmine.git/commitdiff
Fix that Content-Type header field is empty when sending a file of unknown type ...
authorGo MAEDA <maeda@farend.jp>
Tue, 30 Apr 2019 01:37:25 +0000 (01:37 +0000)
committerGo MAEDA <maeda@farend.jp>
Tue, 30 Apr 2019 01:37:25 +0000 (01:37 +0000)
Patch by Go MAEDA.

git-svn-id: http://svn.redmine.org/redmine/trunk@18098 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/attachments_controller.rb
test/fixtures/attachments.yml
test/fixtures/files/2019/04/190430092344_redmine_logo.ai.unknown [new file with mode: 0644]
test/functional/attachments_controller_test.rb

index 1f1b058994ea9daa52349446b57e523fb14d21a1..bc558fdc05e3d834172b865cb6e66a0f99338f8b 100644 (file)
@@ -241,7 +241,7 @@ class AttachmentsController < ApplicationController
     if content_type.blank? || content_type == "application/octet-stream"
       content_type = Redmine::MimeType.of(attachment.filename)
     end
-    content_type.to_s
+    content_type.presence || "application/octet-stream"
   end
 
   def disposition(attachment)
index 15556c6c651b55adfe5b9a4ff14ecbf5b1a23574..299a2878c3df66682ea9d3ad617ed735d562909f 100644 (file)
@@ -281,3 +281,17 @@ attachments_021:
   filename: archive.zip
   author_id: 1
   content_type: application/zip
+attachments_023:
+  created_on: 2019-04-30 09:23:44 +09:00
+  container_type: Project
+  container_id: 1
+  downloads: 0
+  disk_filename: 190430092344_redmine_logo.ai.unknown
+  disk_directory: "2019/04"
+  digest: 68d90c016f0806d88234a6f16530fdf0b7f1d2481354798f1a5fd165dca6b04f
+  id: 23
+  filesize: 4994
+  filename: redmine_logo.ai.unknown
+  author_id: 1
+  description: unknown type
+  content_type:
diff --git a/test/fixtures/files/2019/04/190430092344_redmine_logo.ai.unknown b/test/fixtures/files/2019/04/190430092344_redmine_logo.ai.unknown
new file mode 100644 (file)
index 0000000..4c1c924
--- /dev/null
@@ -0,0 +1,232 @@
+%!PS-Adobe-3.0\r
+%%Creator: Adobe Fireworks\r
+%%DocumentNeededResources: procset Adobe_level2_AI5 1.0 0\r
+%%+ procset Adobe_packedarray 2.0 0\r
+%%+ procset Adobe_cmykcolor 1.1 0\r
+%%+ procset Adobe_cshow 1.1 0\r
+%%+ procset Adobe_customcolor 1.0 0\r
+%%+ procset Adobe_typography_AI5 1.0 0\r
+%%+ procset Adobe_Illustrator_AI5 1.0 0\r
+%%BoundingBox:0 0 183 94\r
+%AI3_TemplateBox: 0 0 183 94\r
+%%PageOrigin:0 0\r
+%AI5_FileFormat 3\r
+%AI3_ColorUsage: Color\r
+%%DocumentProcessColors: Cyan Magenta Yellow Black\r
+%%EndComments\r
+%%BeginProlog\r
+%%EndProlog\r
+%%BeginSetup\r
+Adobe_packedarray /initialize get exec\r
+Adobe_cmykcolor /initialize get exec\r
+Adobe_cshow /initialize get exec\r
+Adobe_customcolor /initialize get exec\r
+Adobe_typography_AI5 /initialize get exec\r
+Adobe_Illustrator_AI5 /initialize get exec\r
+[\r
+39/quotesingle 96/grave 130/quotesinglbase 131/florin 132/quotedblbase\r
+133/ellipsis 134/dagger 135/daggerdbl 136/circumflex 137/perthousand\r
+139/guilsinglleft 140/OE 145/quoteleft 146/quoteright 147/quotedblleft\r
+148/quotedblright 149/bullet 150/endash 151/emdash 152/tilde\r
+155/guilsinglright 156/oe 157/dotlessi 159/Ydieresis 164/currency\r
+166/brokenbar 168/dieresis 169/copyright 170/ordfeminine 172/logicalnot\r
+174/registered 175/macron 176/ring 177/plusminus 178/twosuperior\r
+179/threesuperior 180/acute 181/mu 183/periodcentered 184/cedilla\r
+185/onesuperior 186/ordmasculine 188/onequarter 189/onehalf\r
+190/threequarters 192/Agrave 193/Aacute 194/Acircumflex 195/Atilde\r
+196/Adieresis 197/Aring 198/AE 199/Ccedilla 200/Egrave 201/Eacute\r
+202/Ecircumflex 203/Edieresis 204/Igrave 205/Iacute 206/Icircumflex\r
+207/Idieresis 208/Eth 209/Ntilde 210/Ograve 211/Oacute 212/Ocircumflex\r
+213/Otilde 214/Odieresis 215/multiply 216/Oslash 217/Ugrave 218/Uacute\r
+219/Ucircumflex 220/Udieresis 221/Yacute 222/Thorn 223/germandbls\r
+224/agrave 225/aacute 226/acircumflex 227/atilde 228/adieresis\r
+229/aring 230/ae 231/ccedilla 232/egrave 233/eacute 234/ecircumflex\r
+235/edieresis 236/igrave 237/iacute 238/icircumflex 239/idieresis\r
+240/eth 241/ntilde 242/ograve 243/oacute 244/ocircumflex 245/otilde\r
+246/odieresis 247/divide 248/oslash 249/ugrave 250/uacute 251/ucircumflex\r
+252/udieresis 253/yacute 254/thorn 255/ydieresis\r
+TE\r
+%AI3_BeginEncoding: _Delicious-Bold-Bold Delicious-Bold-Bold\r
+[/_Delicious-Bold-Bold/Delicious-Bold-Bold 0 0 0 TZ\r
+%AI3_EndEncoding TrueType\r
+%%EndSetup\r
+1 1 1 1 0 0 0 79 128 255 Lb\r
+(Ebene 1) Ln\r
+0.000 0.000 0.000 Xa\r
+1 XR\r
+44.00 44.80 m\r
+49.60 44.80 l\r
+50.00 49.60 l\r
+44.80 50.80 l\r
+44.00 44.80 l\r
+f\r
+0.000 0.000 0.000 Xa\r
+1 XR\r
+45.00 51.60 m\r
+50.00 50.40 l\r
+51.20 54.60 l\r
+47.00 56.80 l\r
+45.00 51.60 l\r
+f\r
+0.000 0.000 0.000 Xa\r
+1 XR\r
+47.40 57.60 m\r
+51.40 55.40 l\r
+54.60 57.60 l\r
+51.60 61.00 l\r
+47.40 57.60 l\r
+f\r
+0.000 0.000 0.000 Xa\r
+1 XR\r
+69.80 44.80 m\r
+64.20 44.80 l\r
+63.80 49.60 l\r
+69.00 50.80 l\r
+69.80 44.80 l\r
+f\r
+0.000 0.000 0.000 Xa\r
+1 XR\r
+68.80 51.60 m\r
+63.80 50.40 l\r
+62.60 54.60 l\r
+66.80 56.80 l\r
+68.80 51.60 l\r
+f\r
+0.000 0.000 0.000 Xa\r
+1 XR\r
+66.40 57.60 m\r
+62.40 55.40 l\r
+59.20 57.60 l\r
+62.20 61.00 l\r
+66.40 57.60 l\r
+f\r
+0.000 0.000 0.000 Xa\r
+1 XR\r
+52.60 61.60 m\r
+55.60 58.00 l\r
+58.40 58.00 l\r
+61.00 61.60 l\r
+58.40 62.40 l\r
+55.53 62.40 l\r
+52.60 61.60 l\r
+f\r
+1 To\r
+1 0 0 1 74 43 0.000000 Tp\r
+74.80 43.20 m\r
+141.58 43.20 l\r
+141.58 34.56 l\r
+74.80 34.56 l\r
+74.80 43.20 l\r
+n\r
+TP\r
+0 -14.00 Td\r
+0.200 0.200 0.200 Xa\r
+/_Delicious-Bold-Bold 14.00 Tf\r
+0.000000 Ts\r
+100.000000 100.0 Tz\r
+1 0 Tk\r
+0.000000 Tt\r
+0 Ta\r
+0.200 0.200 0.200 Xa\r
+0 Tr\r
+(Flexible Project Management) Tj\r
+TO\r
+1 To\r
+1 0 0 1 74 60 0.000000 Tp\r
+74.00 60.00 m\r
+139.29 60.00 l\r
+139.29 36.48 l\r
+74.00 36.48 l\r
+74.00 60.00 l\r
+n\r
+TP\r
+0 -45.00 Td\r
+0.604 0.027 0.000 Xa\r
+/_Delicious-Bold-Bold 45.00 Tf\r
+0.000000 Ts\r
+100.000000 100.0 Tz\r
+1 0 Tk\r
+0.000000 Tt\r
+0 Ta\r
+0.604 0.027 0.000 Xa\r
+0 Tr\r
+(RED) Tj\r
+/_Delicious-Bold-Bold 45.00 Tf\r
+0.000000 Ts\r
+100.000000 100.0 Tz\r
+1 0 Tk\r
+0.000000 Tt\r
+0 Ta\r
+0.753 0.106 0.102 Xa\r
+0 Tr\r
+(MINE) Tj\r
+TO\r
+0.604 0.027 0.000 Xa\r
+1 XR\r
+44.00 44.80 m\r
+49.60 44.80 l\r
+50.00 49.60 l\r
+44.80 50.80 l\r
+44.00 44.80 l\r
+f\r
+0.706 0.055 0.059 Xa\r
+1 XR\r
+45.00 51.60 m\r
+50.00 50.40 l\r
+51.20 54.60 l\r
+47.00 56.80 l\r
+45.00 51.60 l\r
+f\r
+0.753 0.106 0.102 Xa\r
+1 XR\r
+47.40 57.60 m\r
+51.40 55.40 l\r
+54.60 57.60 l\r
+51.60 61.00 l\r
+47.40 57.60 l\r
+f\r
+0.604 0.027 0.000 Xa\r
+1 XR\r
+69.80 44.80 m\r
+64.20 44.80 l\r
+63.80 49.60 l\r
+69.00 50.80 l\r
+69.80 44.80 l\r
+f\r
+0.706 0.055 0.059 Xa\r
+1 XR\r
+68.80 51.60 m\r
+63.80 50.40 l\r
+62.60 54.60 l\r
+66.80 56.80 l\r
+68.80 51.60 l\r
+f\r
+0.753 0.106 0.102 Xa\r
+1 XR\r
+66.40 57.60 m\r
+62.40 55.40 l\r
+59.20 57.60 l\r
+62.20 61.00 l\r
+66.40 57.60 l\r
+f\r
+0.753 0.106 0.102 Xa\r
+1 XR\r
+52.60 61.60 m\r
+55.60 58.00 l\r
+58.40 58.00 l\r
+61.00 61.60 l\r
+58.40 62.40 l\r
+55.53 62.40 l\r
+52.60 61.60 l\r
+f\r
+LB\r
+%%PageTrailer\r
+gsave annotatepage grestore showpage\r
+%%Trailer\r
+Adobe_Illustrator_AI5 /terminate get exec\r
+Adobe_typography_AI5 /terminate get exec\r
+Adobe_customcolor /terminate get exec\r
+Adobe_cshow /terminate get exec\r
+Adobe_cmykcolor /terminate get exec\r
+Adobe_packedarray /terminate get exec\r
+%%EOF\r
index 4d6b23f261d2938299bb064f4ce8ae6dd9b52df3..8ef46013cd0a79ab12813b55ed4fb86f5ed2a84d 100644 (file)
@@ -358,6 +358,16 @@ class AttachmentsControllerTest < Redmine::ControllerTest
     set_tmp_attachments_directory
   end
 
+  def test_download_should_assign_application_octet_stream_if_content_type_is_not_determined
+    get :download, :params => {
+        :id => 23
+      }
+    assert_response :success
+    assert_nil Redmine::MimeType.of(attachments(:attachments_023).filename)
+    assert_equal 'application/octet-stream', @response.content_type
+    set_tmp_attachments_directory
+  end
+
   def test_download_missing_file
     get :download, :params => {
         :id => 2