recycleactor commited on
Commit
3e8524e
·
verified ·
1 Parent(s): d35d103

Upload main.rs

Browse files
Files changed (1) hide show
  1. src/main.rs +27 -3
src/main.rs CHANGED
@@ -1281,7 +1281,28 @@ async fn download(
1281
  }
1282
 
1283
  // Determine file extension
1284
- let ext = if used_fmt.contains("FLAC") || content_type.contains("flac") { "flac" } else { "mp3" };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1285
  let meta = AudioTagMeta::from(&q);
1286
  dec = inject_audio_metadata(dec, ext, &meta).await;
1287
 
@@ -1307,14 +1328,17 @@ async fn download(
1307
  };
1308
 
1309
  let ct = if ext == "flac" { "audio/flac" } else { "audio/mpeg" };
 
 
1310
 
1311
  axum::response::Response::builder()
1312
  .status(200)
1313
  .header("Content-Type", ct)
1314
  .header("Content-Length", dec.len().to_string())
1315
- .header("Content-Disposition", format!("attachment; filename=\"{}\"", filename))
1316
- .header("Accept-Ranges", "none")
1317
  .header("Access-Control-Allow-Origin", "*")
 
1318
  .body(axum::body::Body::from(dec))
1319
  .unwrap()
1320
  .into_response()
 
1281
  }
1282
 
1283
  // Determine file extension
1284
+ // Проверяем магические байты для определения РЕАЛЬНОГО формата файла
1285
+ let is_flac = dec.len() > 4 && &dec[0..4] == b"fLaC";
1286
+ let is_mp3 = dec.len() > 3 && (
1287
+ (&dec[0..3] == b"ID3") || // ID3 tag
1288
+ (dec[0] == 0xFF && (dec[1] & 0xE0) == 0xE0) // MP3 sync word
1289
+ );
1290
+
1291
+ let ext = if is_flac {
1292
+ "flac"
1293
+ } else if is_mp3 || used_fmt.contains("MP3") {
1294
+ "mp3"
1295
+ } else if used_fmt.contains("FLAC") {
1296
+ // Заявлен FLAC, но магических байтов нет - возможно битый файл
1297
+ tracing::warn!("Track {} claimed as FLAC but magic bytes not found, treating as mp3", q.id);
1298
+ "mp3"
1299
+ } else {
1300
+ "mp3"
1301
+ };
1302
+
1303
+ tracing::info!("Download track {}: claimed_format={}, detected_ext={}, size={} bytes",
1304
+ q.id, used_fmt, ext, dec.len());
1305
+
1306
  let meta = AudioTagMeta::from(&q);
1307
  dec = inject_audio_metadata(dec, ext, &meta).await;
1308
 
 
1328
  };
1329
 
1330
  let ct = if ext == "flac" { "audio/flac" } else { "audio/mpeg" };
1331
+
1332
+ tracing::info!("Sending file: {} ({})", filename, ct);
1333
 
1334
  axum::response::Response::builder()
1335
  .status(200)
1336
  .header("Content-Type", ct)
1337
  .header("Content-Length", dec.len().to_string())
1338
+ .header("Content-Disposition", format!("inline; filename=\"{}\"", filename))
1339
+ .header("Accept-Ranges", "bytes")
1340
  .header("Access-Control-Allow-Origin", "*")
1341
+ .header("Cache-Control", "public, max-age=31536000")
1342
  .body(axum::body::Body::from(dec))
1343
  .unwrap()
1344
  .into_response()