fix(core): auto-correct invalid filenames for uploaded photos
This commit is contained in:
parent
ecddcad012
commit
6361f4f64a
2 changed files with 26 additions and 0 deletions
|
@ -258,6 +258,7 @@ export async function _normalizeInputMedia(
|
||||||
fileMime: sendMime,
|
fileMime: sendMime,
|
||||||
fileSize: media.fileSize,
|
fileSize: media.fileSize,
|
||||||
requireFileSize: media.type === 'photo',
|
requireFileSize: media.type === 'photo',
|
||||||
|
requireExtension: media.type === 'photo',
|
||||||
})
|
})
|
||||||
inputFile = uploaded.inputFile
|
inputFile = uploaded.inputFile
|
||||||
mime = uploaded.mime
|
mime = uploaded.mime
|
||||||
|
|
|
@ -100,6 +100,15 @@ export async function uploadFile(
|
||||||
* the stream will be buffered in memory and the file size will be inferred from the buffer.
|
* the stream will be buffered in memory and the file size will be inferred from the buffer.
|
||||||
*/
|
*/
|
||||||
requireFileSize?: boolean
|
requireFileSize?: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When using `inputMediaUploadedPhoto` (e.g. when sending an uploaded photo) require
|
||||||
|
* the file extension to be known beforehand.
|
||||||
|
*
|
||||||
|
* This will make the library try to guess the file extension from the file mime type,
|
||||||
|
* or throw an error if it cannot be guessed.
|
||||||
|
*/
|
||||||
|
requireExtension?: boolean
|
||||||
},
|
},
|
||||||
): Promise<UploadedFile> {
|
): Promise<UploadedFile> {
|
||||||
// normalize params
|
// normalize params
|
||||||
|
@ -128,6 +137,7 @@ export async function uploadFile(
|
||||||
if (HAS_FILE && file instanceof File) {
|
if (HAS_FILE && file instanceof File) {
|
||||||
fileName = file.name
|
fileName = file.name
|
||||||
fileSize = file.size
|
fileSize = file.size
|
||||||
|
fileMime = file.type
|
||||||
file = file.stream()
|
file = file.stream()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,6 +319,21 @@ export async function uploadFile(
|
||||||
// telegram requires us to specify the file extension
|
// telegram requires us to specify the file extension
|
||||||
const ext = MIME_TO_EXTENSION[fileMime!]
|
const ext = MIME_TO_EXTENSION[fileMime!]
|
||||||
fileName = ext ? `${DEFAULT_FILE_NAME}.${ext}` : DEFAULT_FILE_NAME
|
fileName = ext ? `${DEFAULT_FILE_NAME}.${ext}` : DEFAULT_FILE_NAME
|
||||||
|
} else if (params.requireExtension) {
|
||||||
|
const extFromMime = MIME_TO_EXTENSION[fileMime!]
|
||||||
|
|
||||||
|
const idx = fileName.lastIndexOf('.')
|
||||||
|
const extFromName = idx === -1 ? undefined : fileName.slice(idx + 1)
|
||||||
|
|
||||||
|
if (!extFromName) {
|
||||||
|
if (!extFromMime) {
|
||||||
|
throw new MtArgumentError(`File name does not have an extension, and we cannot guess it from the mime type (${fileMime})`)
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName = `${fileName}.${extFromMime}`
|
||||||
|
} else if (extFromMime && extFromName !== extFromMime) {
|
||||||
|
throw new MtArgumentError(`File name has ${extFromName} extension (${fileName}), but the mime type (${fileMime}) expects it to be ${extFromMime}`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let inputFile: tl.TypeInputFile
|
let inputFile: tl.TypeInputFile
|
||||||
|
|
Loading…
Reference in a new issue