t Claude Opus 4.6 commited on
Commit
f07037a
·
1 Parent(s): abda79a

fix: improve public download headers for PDF viewer app compatibility

Browse files

- Add proper MIME type detection
- Set Content-Disposition: inline for viewing in apps
- Add Accept-Ranges header for byte range requests
- Add CORS header for cross-origin app access
- Support ?download=1 param for explicit download mode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Files changed (1) hide show
  1. drive_routes.py +25 -2
drive_routes.py CHANGED
@@ -1,7 +1,7 @@
1
  import os
2
  import shutil
3
  import gdown
4
- from flask import Blueprint, render_template, request, jsonify, current_app, send_from_directory, url_for, redirect, session
5
  from flask_login import login_required, current_user
6
  from database import get_db_connection
7
  from datetime import datetime
@@ -590,7 +590,30 @@ def public_api_download(file_id):
590
  with open(file_path, 'wb') as f:
591
  download_file_to_stream(service, file_id, f)
592
 
593
- return send_from_directory(cache_dir, safe_name, as_attachment=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
594
  except Exception as e:
595
  return f"Error: {e}", 500
596
 
 
1
  import os
2
  import shutil
3
  import gdown
4
+ from flask import Blueprint, render_template, request, jsonify, current_app, send_from_directory, send_file, url_for, redirect, session
5
  from flask_login import login_required, current_user
6
  from database import get_db_connection
7
  from datetime import datetime
 
590
  with open(file_path, 'wb') as f:
591
  download_file_to_stream(service, file_id, f)
592
 
593
+ # Determine MIME type
594
+ import mimetypes
595
+ mime_type = mimetypes.guess_type(safe_name)[0] or 'application/octet-stream'
596
+
597
+ # Check if download mode requested
598
+ download_mode = request.args.get('download', '').lower() in ('1', 'true', 'yes')
599
+
600
+ # Return file with proper headers for both inline viewing and download
601
+ response = send_file(
602
+ file_path,
603
+ mimetype=mime_type,
604
+ as_attachment=download_mode,
605
+ download_name=filename
606
+ )
607
+
608
+ # Add headers for better compatibility with PDF viewer apps
609
+ if not download_mode:
610
+ response.headers['Content-Disposition'] = f'inline; filename="{filename}"'
611
+
612
+ # Allow cross-origin access for apps
613
+ response.headers['Access-Control-Allow-Origin'] = '*'
614
+ response.headers['Accept-Ranges'] = 'bytes'
615
+
616
+ return response
617
  except Exception as e:
618
  return f"Error: {e}", 500
619