Spaces:
Running
Running
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>
- 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
|