def serve_static_file(request, file_path=''): """Sends a static file to a user. This serves up the static case files such as the PDFs in a way that can be blocked from search engines if necessary. We do four things: - Look up the document associated with the filepath - Check if it's blocked - If blocked, we set the x-robots-tag HTTP header - Serve up the file using Apache2's xsendfile """ doc = get_object_or_404(Document, local_path=file_path) file_name = file_path.split('/')[-1] file_loc = os.path.join(settings.MEDIA_ROOT, file_path.encode('utf-8')) try: mimetype = magic.from_file(file_loc, mime=True) except IOError: raise Http404 response = HttpResponse() if doc.blocked: response['X-Robots-Tag'] = 'noindex, noodp, noarchive, noimageindex' response['X-Sendfile'] = os.path.join(settings.MEDIA_ROOT, file_path.encode('utf-8')) response['Content-Disposition'] = 'attachment; filename="%s"' % file_name.encode('utf-8') response['Content-Type'] = mimetype if not is_bot(request): tally_stat('case_page.static_file.served') return response
def serve_pagerank_file(request): """Find the pagerank file by interrogating Solr, then serve it up.""" file_loc = settings.BULK_DATA_DIR + "external_pagerank" file_name = file_loc.split('/')[-1] try: mimetype = magic.from_file(file_loc, mime=True) except IOError: raise Http404('Unable to locate external_pagerank file in %s' % settings.BULK_DATA_DIR) response = HttpResponse() response['X-Sendfile'] = os.path.join(file_loc) response['Content-Disposition'] = 'attachment; filename="%s"' % file_name.encode('utf-8') response['Content-Type'] = mimetype tally_stat('bulk_data.pagerank.served') return response
def serve_static_file(request, file_path=''): """Sends a static file to a user. This serves up the static case files such as the PDFs in a way that can be blocked from search engines if necessary. We do four things: - Look up the document or audio file associated with the filepath - Check if it's blocked - If blocked, we set the x-robots-tag HTTP header - Serve up the file using Apache2's xsendfile """ response = HttpResponse() file_loc = os.path.join(settings.MEDIA_ROOT, file_path.encode('utf-8')) if file_path.startswith('mp3'): item = get_object_or_404(Audio, local_path_mp3=file_path) mimetype = 'audio/mpeg' else: item = get_object_or_404(Document, local_path=file_path) try: mimetype = magic.from_file(file_loc, mime=True) except IOError: raise Http404 if item.blocked: response['X-Robots-Tag'] = 'noindex, noodp, noarchive, noimageindex' if settings.DEVELOPMENT: # X-Sendfile will only confuse you in a dev env. response.content = open(file_loc, 'r').read() else: response['X-Sendfile'] = file_loc file_name = file_path.split('/')[-1] response['Content-Disposition'] = 'attachment; filename="%s"' % \ file_name.encode('utf-8') response['Content-Type'] = mimetype if not is_bot(request): tally_stat('case_page.static_file.served') return response