![](/img/trans.png)
[英]How to change the HTTP response content length header in Java Filter
[英]How to set content length as long value in http header in java?
我正在用java編寫一個web服務器,它正在傳輸高達2GB的文件。 當我搜索原因時,我發現java HttpServelet只允許我們將內容長度設置為int。 由於整數的最大大小為2GB,因此當我使用response.setContentLength方法時,它的工作正常可達2gb。 現在的問題是默認的response.setContentLength有整數參數。 所以它沒有把長值作為參數。 我已經嘗試過response.setHeader(“Content-Length”,Long.toString(f.length())); response.addHeader(“Content-Length”,Long.toString(f.length())); 但沒有任何工作。 總是在長值時無法添加內容長度。 所以請為HTTPServletResponse提供任何有效的解決方案,以便我可以將內容長度設置為long值。
您還可以使用以下示例代碼。
long length = fileObj.length();
if (length <= Integer.MAX_VALUE)
{
response.setContentLength((int)length);
}
else
{
response.addHeader("Content-Length", Long.toString(length));
}
試試這個:
long length = ...;
response.setHeader("Content-Length", String.valueOf(length))
希望這可以幫助...
根本不要設置它。
只需讓它使用分塊傳輸模式,這是默認設置。 在這種情況下沒有Content-Length標頭。 請參閱@ BalusC在此問題下的評論。
不要設置它並使用分塊編碼。 還要注意HEAD請求=這些請求應返回與GET相同的內容長度,但不發送實際正文。 javax.servlet.http.HttpServlet中HEAD的默認實現是通過在同一URL上調用GET並忽略所有寫入的響應主體(僅計數字符)來完成的 - 請參閱以下片段:
protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
NoBodyResponse response = new NoBodyResponse(resp); // mock response (not writing)
doGet(req, response); // performs a normal GET request
response.setContentLength(); // this uses INTEGER counter only
}
問題是內容長度計數器也是整數。 所以我建議重載doHead方法,而不是設置內容長度(你可能還想留下GET調用以節省生成巨型文件的時間)。
就像java中的數組一樣,在你的情況下你不能超過2 GB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.