2016-05-12 7 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(); 
    ... 
} 

wenn ich eine GET-Anfrage senden, um eine Datei zu erhalten, wie man die Dateigröße bekommen? Ich versuchte mit request.getContentLength(), es immer -1 zurückgeben. Wenn ich POST zum Hochladen einer Datei verwende, funktioniert es einwandfrei, gibt aber immer noch nicht die genaue Dateigröße zurück.Wie bekomme ich die Dateigröße für GET-Anfrage

Irgendeine Idee? Vielen Dank.

Antwort

3

wenn ich eine GET-Anfrage senden, um eine Datei zu erhalten, wie bekomme ich die Dateigröße?

Wenn der Server eine Datei an den Client sendet (die Client-Browser vorausgesetzt, ist ein web) „weiß“, um die Größe der Datei, weil sie den Inhalt in den Output des ServletResponse Objekts schreibt. Wenn Sie die Datei an den Client senden, legen Sie die Größe der Datei fest, indem Sie im Servlet response.setContentLength(<length>) aufrufen. Dadurch wird der Header Content-Length der entsprechenden http-Antwort festgelegt. Here is the JavaDoc of the setContentLength() method. Dann können Sie diese Größe der Datei oder jeden Inhalt sehen, der an den Browser gesendet wird, indem Sie den developer tools Ihres Lieblingsbrowsers verwenden.

ich versuchte, mit request.getContentLength() zurückgeben immer -1

Here ist die JavaDoc der getContentLength() Methode der ServletRequest Klasse:

Gibt die Länge, in Bytes des Anfragekörpers und zur Verfügung gestellt vom Eingangsstrom, oder -1, wenn die Länge nicht bekannt ist.

Wenn Sie eine POST Anfrage an den Server senden, werden die Anfragedaten im Hauptteil der Anfrage gesendet. Die Methode getContentLength() gibt also einen Wert zurück, der der Länge der Daten entspricht.

Aber eine GET Anfrage sendet die Anfrage Daten an die URL der Anfrage als zB param1=paramValue1&param2=paramValue2&... angefügt. Das bedeutet, dass keine Daten im Hauptteil der Anfrage vorhanden sind. Daher gibt die Methode -1 wie angegeben zurück.

0

Wenn Sie HTML-Formular verwendet, um den Antrag zu stellen, sollten Sie die Methode Post ausdrücklich erklären, wie folgt aus:

<form enctype="multipart/form-data" method="post" name="formName" 
    action="<url>"> 
    <input type="file" contenteditable="false" multiple> 
    <input type="submit" value="Submit"> 
</form> 
Verwandte Themen