noprefix now auto-adds prefix if file exists.
All checks were successful
continuous-integration/appveyor/branch AppVeyor build succeeded
All checks were successful
continuous-integration/appveyor/branch AppVeyor build succeeded
This commit is contained in:
parent
2b31fce045
commit
9a0fca4a22
3 changed files with 68 additions and 20 deletions
|
@ -6,30 +6,35 @@ import config from '../config.mjs'
|
|||
let lastDateString = ''
|
||||
let incrementor = 1
|
||||
|
||||
function getPrefix() {
|
||||
const date = new Date()
|
||||
let prefix = ''
|
||||
|
||||
// Generate 'YYYYMMDD_HHMMSS_' prefix
|
||||
prefix = date
|
||||
.toISOString()
|
||||
.replace(/-/g, '')
|
||||
.replace('T', '_')
|
||||
.replace(/:/g, '')
|
||||
.replace(/\..+/, '_')
|
||||
|
||||
// Append xx_ if same date is hit multiple times
|
||||
if (prefix === lastDateString) {
|
||||
prefix += incrementor.toString().padStart('2', '0') + '_'
|
||||
incrementor++
|
||||
} else {
|
||||
lastDateString = prefix
|
||||
incrementor = 1
|
||||
}
|
||||
|
||||
return prefix
|
||||
}
|
||||
|
||||
export function uploadFile(ctx, siteName, noprefix = false) {
|
||||
return new Promise((res, rej) => {
|
||||
const date = new Date()
|
||||
|
||||
let prefix = ''
|
||||
|
||||
if (!noprefix) {
|
||||
// Generate 'YYYYMMDD_HHMMSS_' prefix
|
||||
prefix = date
|
||||
.toISOString()
|
||||
.replace(/-/g, '')
|
||||
.replace('T', '_')
|
||||
.replace(/:/g, '')
|
||||
.replace(/\..+/, '_')
|
||||
|
||||
// Append xx_ if same date is hit multiple times
|
||||
if (prefix === lastDateString) {
|
||||
prefix += incrementor.toString().padStart('2', '0') + '_'
|
||||
incrementor++
|
||||
} else {
|
||||
lastDateString = prefix
|
||||
}
|
||||
}
|
||||
|
||||
var form = new formidable.IncomingForm()
|
||||
form.uploadDir = `./public/${siteName}`
|
||||
form.maxFileSize = config.get('fileSize')
|
||||
|
@ -46,6 +51,10 @@ export function uploadFile(ctx, siteName, noprefix = false) {
|
|||
})
|
||||
ctx.req.body = fields
|
||||
|
||||
if (!noprefix || fs.existsSync(`./public/${siteName}/${prefix}${file.name}`)) {
|
||||
prefix = getPrefix()
|
||||
}
|
||||
|
||||
fs.rename(files.file.path, `./public/${siteName}/${prefix}${file.name}`, function(err) {
|
||||
if (err) return rej(err)
|
||||
file.path = `./public/${siteName}/${prefix}${file.name}`
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "storage-upload",
|
||||
"version": "2.1.3",
|
||||
"version": "2.1.4",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
|
|
@ -183,6 +183,45 @@ t.describe('Media (API)', () => {
|
|||
assert.strictEqual(img.height, 700)
|
||||
assert.strictEqual(img.format, 'png')
|
||||
})
|
||||
|
||||
t.test('should upload and create file with prefix if exists', async () => {
|
||||
let token = encode(null, { iss: 'development' }, secret)
|
||||
|
||||
await fs.unlink(resolve(`../../public/development/test.png`)).catch(function() {})
|
||||
|
||||
let datas = []
|
||||
datas.push(await client.upload(
|
||||
`/media/noprefix?token=${token}`,
|
||||
resolve('test.png')
|
||||
))
|
||||
|
||||
datas.push(await client.upload(
|
||||
`/media/noprefix?token=${token}`,
|
||||
resolve('test.png')
|
||||
))
|
||||
|
||||
testFiles.push(datas[0].path)
|
||||
testFiles.push(datas[1].path)
|
||||
|
||||
let prefix = new Date().toISOString().replace(/-/g,'').split('T')[0]
|
||||
|
||||
let first = datas[0]
|
||||
let second = datas[1]
|
||||
|
||||
assert.notStrictEqual(first.filename, second.filename)
|
||||
assert.notOk(first.filename.startsWith(currYear))
|
||||
assert.notOk(first.filename.startsWith(prefix))
|
||||
assert.ok(second.filename.startsWith(currYear))
|
||||
assert.ok(second.filename.startsWith(prefix))
|
||||
|
||||
let stats = await Promise.all([
|
||||
fs.stat(resolve('test.png')),
|
||||
fs.stat(resolve('../../public/development/test.png')),
|
||||
fs.stat(resolve('../../public/development/' + second.filename)),
|
||||
])
|
||||
assert.strictEqual(stats[0].size, stats[1].size)
|
||||
assert.strictEqual(stats[0].size, stats[2].size)
|
||||
})
|
||||
})
|
||||
|
||||
t.timeout(10000).describe('POST /media/resize', function temp() {
|
||||
|
|
Loading…
Reference in a new issue