簡體   English   中英

如何在java的http頭中將內容長度設置為long值?

[英]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.HttpServletHEAD的默認實現是通過在同一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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM