def retrieve(self, request, pk): requestedFile = self.request.query_params.get('file', None) requestedTag = self.request.query_params.get('tag', None) serializer_context = {'request': request} try: serializer_instance = self.queryset.get(analisador_name=pk) # serializer_instance = self.queryset.get(pk=pk) except UploadFileAnalisador.DoesNotExist: raise NotFound('UploadFile não existe na Base de Dados.') serializer = self.serializer_class(serializer_instance, context=serializer_context) responseFile = None filename = None if requestedFile is not None: if requestedFile == 'scaler': file = pickle.loads(serializer_instance.scaler_data) responseFile = io.BufferedReader(io.BytesIO(file)) filename = 'scaler_data' if requestedFile == 'modelo': file = pickle.loads(serializer_instance.modelo) responseFile = io.BufferedReader(io.BytesIO(file)) filename = 'modelo.hdf5' if responseFile is not None and filename is not None: response = FileResponse(responseFile) response.as_attachment = False response.filename = filename response.set_headers({'content_type': 'application/octet-stream'}) return response else: return NotFound()
def get_file_content(file_name, file_url, as_attachment=False): ''' Gets file content usually from File Storage URL and returns it back. ''' try: # Remote server response = request(method='get', url=file_url, stream=True) except requests.exceptions.MissingSchema: # File system response = open(os.path.abspath(file_url), 'rb') filename = file_name.split('/')[-1] if file_name else file_url.split( '/')[-1] http_response = FileResponse( streaming_content=response, as_attachment=as_attachment, # take the last part of the filename path filename=filename, status=getattr(response, 'status_code', None), content_type=getattr(response, 'headers', {}).get('Content-Type'), ) http_response.set_headers(filelike=response) if as_attachment: http_response['Access-Control-Expose-Headers'] = 'Content-Disposition' return http_response
def dump(model_admin, request, queryset): data = [ReportSerializer(report, mode='table').data for report in queryset] with tempfile.SpooledTemporaryFile(mode="w", newline="") as tmp: fc = csv.DictWriter(tmp, fieldnames=data[0].keys()) fc.writeheader() fc.writerows(data) tmp.seek(0) file_response = FileResponse(tmp.read(), as_attachment=True, filename="reports.csv") file_response.set_headers(tmp) return file_response