File downloads from Browser Views

Hi everyone,

how do you implement file downloads for browser views?

I usually take the following snippet, but was wondering if this is the best approach :thinking:

def download(self, data, filename, mimetype="text/calendar"):
    response = self.request.response
    response.setHeader("Content-Disposition", "attachment; filename={}"
                       .format(filename))
    response.setHeader("Content-Type", "{}; charset=utf-8"
                       .format(mimetype))
    response.setHeader("Content-Length", len(data))
    response.setHeader("Cache-Control", "no-store")
    response.setHeader("Pragma", "no-cache")
    response.write(data)

Thanks for sharing,
Ramon

We use this same approach. In this example we use tablib to create a XLSX file:

    filename = "{}-{}-contacts".format(date, context.id)
        self.request.response.setHeader(
            "Content-type",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        )
        self.request.response.setHeader(
            "Content-disposition",
            "attachment;filename={}.xlsx".format(filename),
        )

        return file.export("xlsx")
1 Like