21 行
944 B
TypeScript
21 行
944 B
TypeScript
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
|
|
import { fileNameFromUrl, parseContentDispositionFileName, sanitizeFileName } from '../src/fileName'
|
|
|
|
test('fileNameFromUrl handles encoded names, query strings, and fallbacks', () => {
|
|
assert.equal(fileNameFromUrl('https://example.test/files/%E6%8A%A5%E5%91%8A.pdf?x=1'), '报告.pdf')
|
|
assert.equal(fileNameFromUrl('https://example.test/'), 'download')
|
|
assert.equal(fileNameFromUrl('not a url/file.txt#preview'), 'file.txt')
|
|
})
|
|
|
|
test('parseContentDispositionFileName prefers RFC 5987 and sanitizes names', () => {
|
|
assert.equal(
|
|
parseContentDispositionFileName("attachment; filename*=UTF-8''%E6%8A%A5%E5%91%8A.pdf"),
|
|
'报告.pdf',
|
|
)
|
|
assert.equal(parseContentDispositionFileName('attachment; filename="a:b.pdf"'), 'a_b.pdf')
|
|
assert.equal(parseContentDispositionFileName('inline'), null)
|
|
assert.equal(sanitizeFileName(' a / b.txt '), 'a _ b.txt')
|
|
})
|