2016-05-12 10 views
0
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws Exception{ 
... 
HttpServletRequest req = (HttpServletRequest) request; 
if ("POST".equals(req.getMethod())) 
{ 
    long bytesTransferred = request.getContentLength(); 
    ... 
} 
else 
{ 
    long bytesTransferred = request.getContentLength(); 
    ... 
} 

ファイルを取得するGET要求を送信すると、ファイルサイズを取得する方法は? 私はrequest.getContentLength()を使ってみましたが、常に-1を返します。 POSTを使用してファイルをアップロードすると、正常に動作しますが、正確なファイルサイズは返されません。GET要求のファイルサイズを取得する方法

ありがとう。

答えて

3

ファイルを取得するGETリクエストを送信すると、ファイルサイズを取得する方法は?

サーバーがクライアントにファイルを送信すると(クライアントがWebブラウザであると仮定して)、ServletResponseオブジェクトのOutputStreamにコンテンツを書き込んでいるため、ファイルのサイズを「認識」します。ファイルをclietに送信するときには、サーブレットでresponse.setContentLength(<length>)を呼び出してファイルのサイズを設定します。これにより、対応するhttp応答のヘッダーがContent-Lengthに設定されます。 Here is the JavaDoc of the setContentLength() method。次に、お気に入りのブラウザのdeveloper toolsを使用して、ファイルのこのサイズやブラウザに送信されたコンテンツを確認できます。

Iはrequest.getContentLength()を使用して試みたが、それは常に返す-1

HereをのServletRequestクラスのgetContentLength()方法のJavaDocれる:

はで、長さを返します要求本体のバイトで、入力ストリームによって利用可能になります。長さが分からない場合は-1です。

POSTリクエストをサーバーに送信すると、要求データが要求の本文に送信されます。したがって、getContentLength()メソッドは、データの長さに対応する値を返します。

しかし、GETリクエストは、リクエストのURLに付加されたリクエストデータを、たとえばparam1=paramValue1&param2=paramValue2&...として送信します。これは、要求の本文にデータがないことを意味します。したがって、このメソッドは指定された-1を返します。

0

あなたが要求を提出するHTMLフォームを使用した場合、あなたはこのように、明示的方法の記事を宣言する必要があります。

<form enctype="multipart/form-data" method="post" name="formName" 
    action="<url>"> 
    <input type="file" contenteditable="false" multiple> 
    <input type="submit" value="Submit"> 
</form> 
関連する問題