数通智联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.1 KiB

2 years ago
function encodeCharacter (character) {
return character.charCodeAt(0).toString(32)
}
function encodeFilename (name) {
let suffix = ''
return name.replace(/[^A-Z0-9]/ig, (character) => {
suffix += `-${encodeCharacter(character)}`
return '/'
}) + suffix
}
/**
* Takes a file object and turns it into fileID, by converting file.name to lowercase,
* removing extra characters and adding type, size and lastModified
*
* @param {object} file
* @returns {string} the fileID
*/
export default function generateFileID (file) {
// It's tempting to do `[items].filter(Boolean).join('-')` here, but that
// is slower! simple string concatenation is fast
let id = 'uppy'
if (typeof file.name === 'string') {
id += `-${encodeFilename(file.name.toLowerCase())}`
}
if (file.type !== undefined) {
id += `-${file.type}`
}
if (file.meta && typeof file.meta.relativePath === 'string') {
id += `-${encodeFilename(file.meta.relativePath.toLowerCase())}`
}
if (file.data.size !== undefined) {
id += `-${file.data.size}`
}
if (file.data.lastModified !== undefined) {
id += `-${file.data.lastModified}`
}
return id
}