HttpServletResponseに2GBを超えるContentLengthを設定する方法

JavaServletでファイルサイズを返答する際に困ったのでメモ。

 

ファイルのダウンロードリクエストに対しては、ファイルサイズをレスポンスしてあげる必要がある。

レスポンス情報はHttpServletResponseにセットすることでクライアントに返すのが基本。

 

ファイルサイズについては

#setContentLength(int value)という関数があるので、基本的にはこれを使うことになるのだが、、、

引数がintであるため、intの最大値である2,147,483,647 ≒ 2.1GBちょいまでしかファイルサイズを設定できないことになる。

今日び、2GB越えのファイルなぞゴロゴロあるわけで、、、

さて困ったぞとなったわけである。

 

ちなみに

setContentLengthはint引数のものしかない。

#昔は2GB越えのファイルを転送するなんて想像もしていなかったのだろうか。。。

 

色々と調べ回って、単純な解を見つけた。

https://stackoverflow.com/questions/11466905/how-to-set-content-length-as-long-value-in-http-header-in-java

 

HttpServletResponse#setHeader(String headerName, String value)

という関数を使えばよい。

 headerNameという名前のフィールドにvalueをセットしてくれるというもの。

これを使って

response.setHeader("Content-Length", String.valueOf(size))

とやってあげれば、long長のファイルサイズであってもヘッダーに設定できる。

 

なんか、スマートな解ではないのですごくモヤモヤするが、、、

まぁひとまずこれで良しとしよう。