Add logging and improve headers in file proxy preview
- Add console logging for debugging proxy preview requests - Include filename in Content-Disposition header - Add Content-Length header for proper response size - Add X-Content-Type-Options header for PDF security - Improve buffer handling clarity with explicit ArrayBuffer conversion
This commit is contained in:
parent
e377662935
commit
1baa1e3c4d
|
|
@ -6,6 +6,8 @@ export default defineEventHandler(async (event) => {
|
||||||
const query = getQuery(event);
|
const query = getQuery(event);
|
||||||
const fileName = query.fileName as string;
|
const fileName = query.fileName as string;
|
||||||
|
|
||||||
|
console.log('Proxy preview requested for:', fileName);
|
||||||
|
|
||||||
if (!fileName) {
|
if (!fileName) {
|
||||||
throw createError({
|
throw createError({
|
||||||
statusCode: 400,
|
statusCode: 400,
|
||||||
|
|
@ -15,12 +17,15 @@ export default defineEventHandler(async (event) => {
|
||||||
|
|
||||||
// Get content type
|
// Get content type
|
||||||
const contentType = mime.lookup(fileName) || 'application/octet-stream';
|
const contentType = mime.lookup(fileName) || 'application/octet-stream';
|
||||||
|
console.log('Content type:', contentType);
|
||||||
|
|
||||||
// Get the download URL
|
// Get the download URL
|
||||||
const url = await getDownloadUrl(fileName);
|
const url = await getDownloadUrl(fileName);
|
||||||
|
console.log('MinIO URL obtained');
|
||||||
|
|
||||||
// Fetch the file content from MinIO
|
// Fetch the file content from MinIO
|
||||||
const response = await fetch(url);
|
const response = await fetch(url);
|
||||||
|
console.log('MinIO response status:', response.status);
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw createError({
|
throw createError({
|
||||||
|
|
@ -29,15 +34,26 @@ export default defineEventHandler(async (event) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the file buffer
|
// Get the file data as ArrayBuffer
|
||||||
const buffer = Buffer.from(await response.arrayBuffer());
|
const arrayBuffer = await response.arrayBuffer();
|
||||||
|
const buffer = Buffer.from(arrayBuffer);
|
||||||
|
|
||||||
|
console.log('File size:', buffer.length, 'bytes');
|
||||||
|
|
||||||
// Set appropriate headers for preview
|
// Set appropriate headers for preview
|
||||||
setHeader(event, 'Content-Type', contentType);
|
setHeader(event, 'Content-Type', contentType);
|
||||||
setHeader(event, 'Content-Disposition', 'inline');
|
setHeader(event, 'Content-Disposition', `inline; filename="${fileName.split('/').pop()}"`);
|
||||||
setHeader(event, 'Cache-Control', 'public, max-age=3600');
|
setHeader(event, 'Cache-Control', 'public, max-age=3600');
|
||||||
|
setHeader(event, 'Content-Length', String(buffer.length));
|
||||||
|
|
||||||
// Return the file buffer
|
// For PDF files, add additional headers
|
||||||
|
if (contentType === 'application/pdf') {
|
||||||
|
setHeader(event, 'X-Content-Type-Options', 'nosniff');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Returning buffer for preview');
|
||||||
|
|
||||||
|
// Return the buffer directly - Nitro will handle it properly
|
||||||
return buffer;
|
return buffer;
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Failed to proxy preview:', error);
|
console.error('Failed to proxy preview:', error);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue