Merge pull request #518 from taigaio/issue-3468-export-import-project-break-attachments
Issue 3468: Export project then import destroyed the attachmentsremotes/origin/logger
commit
af2dae5f3b
|
@ -66,7 +66,20 @@ class AttachedFileField(serializers.WritableField):
|
||||||
def from_native(self, data):
|
def from_native(self, data):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
return ContentFile(base64.b64decode(data['data']), name=data['name'])
|
|
||||||
|
# Each sequence of 3 octets is represented by 4 characters in base64.
|
||||||
|
# The file was encoded in chunks of 8190 (multiple of three) so the proper way of decoding it is:
|
||||||
|
# - split the encoded data in multiple of four chars blocks
|
||||||
|
# - decode each block
|
||||||
|
decoded_data = b''
|
||||||
|
pending_data = data['data']
|
||||||
|
chunk_size = 8192
|
||||||
|
while pending_data:
|
||||||
|
decoding_data = pending_data[0:chunk_size]
|
||||||
|
decoded_data += base64.b64decode(decoding_data)
|
||||||
|
pending_data = pending_data[chunk_size:]
|
||||||
|
|
||||||
|
return ContentFile(decoded_data, name=data['name'])
|
||||||
|
|
||||||
|
|
||||||
class RelatedNoneSafeField(serializers.RelatedField):
|
class RelatedNoneSafeField(serializers.RelatedField):
|
||||||
|
|
|
@ -56,7 +56,7 @@ def add_errors(section, errors):
|
||||||
_errors_log[section] = [errors]
|
_errors_log[section] = [errors]
|
||||||
|
|
||||||
|
|
||||||
def render_project(project, outfile, chunk_size = 8192):
|
def render_project(project, outfile, chunk_size = 8190):
|
||||||
serializer = serializers.ProjectExportSerializer(project)
|
serializer = serializers.ProjectExportSerializer(project)
|
||||||
outfile.write('{\n')
|
outfile.write('{\n')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue