#29599 closed Cleanup/optimization (invalid)
chunk_size for InMemoryUploadedFile is not used
| Reported by: | Ali Aliyev | Owned by: | nobody |
|---|---|---|---|
| Component: | File uploads/storage | Version: | dev |
| Severity: | Normal | Keywords: | chunks |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Hello,
is it okay that the chunk_size is not used for InMemoryUploadedFile. chunks?
Examples to compare:
https://github.com/django/django/blob/master/django/core/files/uploadedfile.py#L92
https://github.com/django/django/blob/master/django/core/files/base.py#L48
Change History (2)
follow-up: 2 comment:1 by , 7 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
comment:2 by , 7 years ago
Thanks for the quick response!
I have my own file storage class where _save method is called: https://github.com/django/django/blob/master/django/core/files/storage.py#L49
The problem is that I have to upload chunks (each chunks should not be more than 4mb) but content is instance of the InMemoryUploadedFile in which case I had to implement my own chunks method:
class AzureStorage(Storage):
...
def _read_in_chunks(self, file_object, chunk_size=1024):
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
def _save(self, name, content):
if hasattr(content.file, 'content_type'):
content_type = content.file.content_type
else:
content_type = mimetypes.guess_type(name)[0]
chunks = self._read_in_chunks(
content,
settings.AZURE_CHUNK_SIZE * 1024 * 1024
)
blocks_list = []
for chunk in chunks:
block_id = uuid.uuid4()
self.connection.put_block(self.azure_container, name, chunk, block_id)
blocks_list.append(str(block_id))
self.connection.put_block_list(
self.azure_container,
name,
blocks_list,
x_ms_blob_content_type=content_type
)
return name
so content.cunks will not work here
Replying to Carlton Gibson:
is it okay...
Yes.
In general, why do you handle a file in chunks? So that you can control how much is in memory at one time.
With
InMemoryUploadedFileyou already decided you'd handle the whole thing in memory at once.
So the idea of handling it inchunksdoesn't really make sense.
Yes.
In general, why do you handle a file in chunks? So that you can control how much is in memory at one time.
With
InMemoryUploadedFileyou already decided you'd handle the whole thing in memory at once.So the idea of handling it in
chunksdoesn't really make sense.(See the comment a few lines below.)