File tree 5 files changed +17
-19
lines changed
5 files changed +17
-19
lines changed Original file line number Diff line number Diff line change 1
1
unreleased
2
2
==========
3
3
4
+ * Use ` content-disposition ` module for ` res.attachment ` /` res.download `
5
+ - Sends standards-compliant ` Content-Disposition ` header
6
+ - Full Unicode support
4
7
* deps: etag@~ 1.5.0
5
8
- Improve string performance
6
9
- Slightly improve speed for weak ETags over 1KB
Original file line number Diff line number Diff line change 2
2
* Module dependencies.
3
3
*/
4
4
5
+ var contentDisposition = require ( 'content-disposition' ) ;
5
6
var deprecate = require ( 'depd' ) ( 'express' ) ;
6
7
var escapeHtml = require ( 'escape-html' ) ;
7
8
var http = require ( 'http' ) ;
@@ -13,7 +14,6 @@ var sign = require('cookie-signature').sign;
13
14
var normalizeType = require ( './utils' ) . normalizeType ;
14
15
var normalizeTypes = require ( './utils' ) . normalizeTypes ;
15
16
var setCharset = require ( './utils' ) . setCharset ;
16
- var contentDisposition = require ( './utils' ) . contentDisposition ;
17
17
var statusCodes = http . STATUS_CODES ;
18
18
var cookie = require ( 'cookie' ) ;
19
19
var send = require ( 'send' ) ;
@@ -626,9 +626,13 @@ res.format = function(obj){
626
626
* @api public
627
627
*/
628
628
629
- res . attachment = function ( filename ) {
630
- if ( filename ) this . type ( extname ( filename ) ) ;
629
+ res . attachment = function attachment ( filename ) {
630
+ if ( filename ) {
631
+ this . type ( extname ( filename ) ) ;
632
+ }
633
+
631
634
this . set ( 'Content-Disposition' , contentDisposition ( filename ) ) ;
635
+
632
636
return this ;
633
637
} ;
634
638
Original file line number Diff line number Diff line change 2
2
* Module dependencies.
3
3
*/
4
4
5
+ var contentDisposition = require ( 'content-disposition' ) ;
6
+ var deprecate = require ( 'depd' ) ( 'express' ) ;
5
7
var mime = require ( 'send' ) . mime ;
6
8
var basename = require ( 'path' ) . basename ;
7
9
var etag = require ( 'etag' ) ;
@@ -120,18 +122,8 @@ exports.normalizeTypes = function(types){
120
122
* @api private
121
123
*/
122
124
123
- exports . contentDisposition = function ( filename ) {
124
- var ret = 'attachment' ;
125
- if ( filename ) {
126
- filename = basename ( filename ) ;
127
- // if filename contains non-ascii characters, add a utf-8 version ala RFC 5987
128
- ret = / [ ^ \0 4 0 -\176] / . test ( filename )
129
- ? 'attachment; filename="' + encodeURI ( filename ) + '"; filename*=UTF-8\'\'' + encodeURI ( filename )
130
- : 'attachment; filename="' + filename + '"' ;
131
- }
132
-
133
- return ret ;
134
- } ;
125
+ exports . contentDisposition = deprecate . function ( contentDisposition ,
126
+ 'utils.contentDisposition: use content-disposition npm module instead' ) ;
135
127
136
128
/**
137
129
* Parse accept params `str` returning an
Original file line number Diff line number Diff line change 28
28
"homepage" : " http://expressjs.com/" ,
29
29
"dependencies" : {
30
30
"accepts" : " ~1.1.2" ,
31
+ "content-disposition" : " 0.5.0" ,
31
32
"cookie-signature" : " 1.0.5" ,
32
33
"debug" : " ~2.0.0" ,
33
34
"depd" : " 0.4.5" ,
Original file line number Diff line number Diff line change @@ -56,10 +56,8 @@ describe('res', function(){
56
56
57
57
request ( app )
58
58
. get ( '/' )
59
- . expect ( 'Content-Disposition' , 'attachment;' +
60
- ' filename="%E6%97%A5%E6%9C%AC%E8%AA%9E.txt";' +
61
- ' filename*=UTF-8\'\'%E6%97%A5%E6%9C%AC%E8%AA%9E.txt' ,
62
- done ) ;
59
+ . expect ( 'Content-Disposition' , 'attachment; filename="???.txt"; filename*=UTF-8\'\'%E6%97%A5%E6%9C%AC%E8%AA%9E.txt' )
60
+ . expect ( 200 , done ) ;
63
61
} )
64
62
65
63
it ( 'should set the Content-Type' , function ( done ) {
You can’t perform that action at this time.
0 commit comments