Skip to content

Commit 2188346

Browse files
committed
Fix for possible corrupted PDF file issue on export
1 parent 753dfb1 commit 2188346

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

src/collective/exportimport/export_content.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -291,28 +291,31 @@ def __call__(
291291

292292
# Export as one json-file through the browser
293293
else:
294-
with tempfile.TemporaryFile(mode="w+") as f:
294+
with tempfile.TemporaryFile(mode="w+b") as f:
295295
self.start()
296296
for number, datum in enumerate(content_generator, start=1):
297297
if number == 1:
298-
f.write("[")
298+
f.write(b"[")
299299
else:
300-
f.write(",")
301-
json.dump(datum, f, sort_keys=True, indent=4)
300+
f.write(b",")
301+
json_data = json.dumps(datum, sort_keys=True, indent=4).encode('utf-8')
302+
f.write(json_data)
302303
if number:
303304
if self.errors and self.write_errors:
304-
f.write(",")
305+
f.write(b",")
305306
errors = {"unexported_paths": self.errors}
306-
json.dump(errors, f, indent=4)
307-
f.write("]")
307+
json_data = json.dumps(errors, indent=4).encode('utf-8')
308+
f.write(json_data)
309+
f.write(b"]")
308310
msg = _(u"Exported {} {} with {} errors").format(
309311
number, self.portal_type, len(self.errors)
310312
)
311313
logger.info(msg)
312314
api.portal.show_message(msg, self.request)
313315
response = self.request.response
314-
response.setHeader("content-type", "application/json")
315-
response.setHeader("content-length", f.tell())
316+
response.setHeader("content-type", "application/json; charset=utf-8")
317+
content_length = f.tell()
318+
response.setHeader("content-length", content_length)
316319
response.setHeader(
317320
"content-disposition",
318321
'attachment; filename="{0}"'.format(filename),
@@ -324,7 +327,7 @@ def __call__(
324327
noLongerProvides(self.request, IPathBlobsMarker)
325328
f.seek(0)
326329
self.finish()
327-
return response.write(safe_bytes(f.read()))
330+
return response.write(f.read())
328331

329332
def update(self):
330333
"""Hook to do something before export."""

0 commit comments

Comments
 (0)