Skip to content

Commit a71de22

Browse files
committed
Fix issue where file.content_length was incorrect when using Flask dev server
1 parent ab6ccb0 commit a71de22

File tree

1 file changed

+11
-3
lines changed
  • flask_parameter_validation/parameter_types

1 file changed

+11
-3
lines changed

flask_parameter_validation/parameter_types/file.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
- Would originally be in Flask's request.file
44
- Value will be a FileStorage object
55
"""
6+
import io
7+
8+
from werkzeug.datastructures import FileStorage
9+
610
from .parameter import Parameter
711

812

@@ -21,7 +25,7 @@ def __init__(
2125
self.min_length = min_length
2226
self.max_length = max_length
2327

24-
def validate(self, value):
28+
def validate(self, value: FileStorage):
2529
# Content type validation
2630
if self.content_types is not None:
2731
# We check mimetype, as it strips charset etc.
@@ -31,15 +35,19 @@ def validate(self, value):
3135

3236
# Min content length validation
3337
if self.min_length is not None:
34-
if value.content_length < self.min_length:
38+
origin = value.stream.tell()
39+
if value.stream.seek(0, io.SEEK_END) < self.min_length:
3540
raise ValueError(
3641
f"must have a content-length at least {self.min_length}."
3742
)
43+
value.stream.seek(origin)
3844

3945
# Max content length validation
4046
if self.max_length is not None:
41-
if value.content_length > self.max_length:
47+
origin = value.stream.tell()
48+
if value.stream.seek(0, io.SEEK_END) > self.max_length:
4249
raise ValueError(
4350
f"must have a content-length at most {self.max_length}."
4451
)
52+
value.stream.seek(origin)
4553
return True

0 commit comments

Comments
 (0)