Improve storage file handling
This commit is contained in:
@@ -96,8 +96,9 @@ class Document(models.Model):
|
||||
if save:
|
||||
self.save()
|
||||
|
||||
def read(self, count=1024):
|
||||
return self.file.storage.open(self.file.url).read(count)
|
||||
|
||||
def open(self):
|
||||
return self.file.storage.open(self.file.path)
|
||||
|
||||
|
||||
@models.permalink
|
||||
@@ -107,7 +108,7 @@ class Document(models.Model):
|
||||
|
||||
def update_checksum(self, save=True):
|
||||
if self.exists():
|
||||
self.checksum = unicode(CHECKSUM_FUNCTION(self.file.read()))
|
||||
self.checksum = unicode(CHECKSUM_FUNCTION(self.open().read()))
|
||||
if save:
|
||||
self.save()
|
||||
|
||||
@@ -122,22 +123,21 @@ class Document(models.Model):
|
||||
|
||||
|
||||
def save_to_file(self, filepath, buffer_size=1024*1024):
|
||||
storage = self.file.storage.open(self.file.url)
|
||||
input_descriptor = self.open()
|
||||
output_descriptor = open(filepath, 'wb')
|
||||
while 1:
|
||||
copy_buffer = storage.read()
|
||||
copy_buffer = input_descriptor.read()
|
||||
if copy_buffer:
|
||||
output_descriptor.write(copy_buffer)
|
||||
else:
|
||||
break
|
||||
|
||||
#input_descriptor.close()
|
||||
output_descriptor.close()
|
||||
return filepath
|
||||
|
||||
|
||||
def exists(self):
|
||||
return self.file.storage.exists(self.file.url)
|
||||
return self.file.storage.exists(self.file.path)
|
||||
|
||||
|
||||
def get_metadata_groups(self):
|
||||
|
||||
@@ -503,9 +503,7 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, quality=QUALITY_
|
||||
if filepath:
|
||||
return serve_file(request, File(file=open(filepath, 'r')))
|
||||
#Save to a temporary location
|
||||
document.file.open()
|
||||
desc = document.file.storage.open(document.file.path)
|
||||
filepath = from_descriptor_to_tempfile(desc, document.checksum)
|
||||
filepath = from_descriptor_to_tempfile(document.open(), document.checksum)
|
||||
output_file = convert(filepath, size=size, format='jpg', quality=quality, extra_options=tranformation_string, page=page-1)
|
||||
return serve_file(request, File(file=open(output_file, 'r')), content_type='image/jpeg')
|
||||
except Exception, e:
|
||||
@@ -525,7 +523,7 @@ def document_download(request, document_id):
|
||||
document = get_object_or_404(Document, pk=document_id)
|
||||
try:
|
||||
#Test permissions and trigger exception
|
||||
document.file.open()
|
||||
document.open()
|
||||
return serve_file(request, document.file, save_as='%s' % document.get_fullname())
|
||||
except Exception, e:
|
||||
messages.error(request, e)
|
||||
|
||||
Reference in New Issue
Block a user