[Backport] Issue 3468: Export project then import destroyed the attachments
parent
455a9f3b4f
commit
9db6653007
|
@ -66,7 +66,20 @@ class AttachedFileField(serializers.WritableField):
|
|||
def from_native(self, data):
|
||||
if not data:
|
||||
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):
|
||||
|
|
|
@ -56,7 +56,7 @@ def add_errors(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)
|
||||
outfile.write('{\n')
|
||||
|
||||
|
|
Loading…
Reference in New Issue