Fix:Set correct mime type for m4b file static requests

This commit is contained in:
advplyr 2022-07-24 13:32:05 -05:00
parent 6cbfd8679b
commit 976427b0b3
4 changed files with 24 additions and 13 deletions

View File

@ -1,5 +1,8 @@
const { AudioMimeType } = require('../utils/constants')
const { getAudioMimeTypeFromExtname } = require('../utils/fileUtils')
const DEFAULT_EXPIRATION = 1000 * 60 * 60 // 60 minutes
const DEFAULT_TIMEOUT = 1000 * 60 * 30 // 30 minutes
class Download {
constructor(download) {
this.id = null
@ -32,16 +35,7 @@ class Download {
}
get mimeType() {
if (this.ext === '.mp3' || this.ext === '.m4b' || this.ext === '.m4a') {
return 'audio/mpeg'
} else if (this.ext === '.mp4') {
return 'audio/mp4'
} else if (this.ext === '.ogg') {
return 'audio/ogg'
} else if (this.ext === '.aac' || this.ext === '.m4p') {
return 'audio/aac'
}
return 'audio/mpeg'
return getAudioMimeTypeFromExtname(this.ext) || AudioMimeType.MP3
}
toJSON() {

View File

@ -1,4 +1,3 @@
const { isNullOrNaN } = require('../../utils/index')
const { AudioMimeType } = require('../../utils/constants')
const AudioMetaTags = require('../metadata/AudioMetaTags')
const FileMetadata = require('../metadata/FileMetadata')

View File

@ -1,6 +1,6 @@
const express = require('express')
const Path = require('path')
const Logger = require('../Logger')
const { getAudioMimeTypeFromExtname } = require('../utils/fileUtils')
class StaticRouter {
constructor(db) {
@ -20,7 +20,16 @@ class StaticRouter {
var fullPath = null
if (item.isFile) fullPath = item.path
else fullPath = Path.join(item.path, remainingPath)
res.sendFile(fullPath)
var opts = {}
// Express does not set the correct mimetype for m4b files so use our defined mimetypes if available
const audioMimeType = getAudioMimeTypeFromExtname(Path.extname(fullPath))
if (audioMimeType) {
opts = { headers: { 'Content-Type': audioMimeType } }
}
res.sendFile(fullPath, opts)
})
}
}

View File

@ -3,6 +3,7 @@ const rra = require('../libs/recursiveReaddirAsync')
const axios = require('axios')
const Path = require('path')
const Logger = require('../Logger')
const { AudioMimeType } = require('./constants')
async function getFileStat(path) {
try {
@ -211,3 +212,11 @@ module.exports.sanitizeFilename = (filename, colonReplacement = ' - ') => {
return sanitized
}
// Returns null if extname is not in our defined list of audio extnames
module.exports.getAudioMimeTypeFromExtname = (extname) => {
if (!extname || !extname.length) return null
const formatUpper = extname.slice(1).toUpperCase()
if (AudioMimeType[formatUpper]) return AudioMimeType[formatUpper]
return null
}