mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-12-18 08:37:45 -05:00
7b9f9a487b
Signed-off-by: David Mehren <git@herrmehren.de>
75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { Router } from 'express'
|
|
import formidable from 'formidable'
|
|
|
|
import { config } from '../../config'
|
|
import { logger } from '../../logger'
|
|
import { errors } from '../../errors'
|
|
import { AzureUploadProvider } from './azure'
|
|
import { FilesystemUploadProvider } from './filesystem'
|
|
import { ImgurUploadProvider } from './imgur'
|
|
import { LutimUploadProvider } from './lutim'
|
|
import { MinioUploadProvider } from './minio'
|
|
import { S3UploadProvider } from './s3'
|
|
|
|
interface UploadProvider {
|
|
uploadImage: (imagePath: string, callback: (err?: Error, url?: string) => void) => void;
|
|
}
|
|
|
|
const ImageRouter = Router()
|
|
|
|
// upload image
|
|
ImageRouter.post('/uploadimage', function (req, res) {
|
|
const form = new formidable.IncomingForm()
|
|
|
|
form.keepExtensions = true
|
|
|
|
if (config.imageUploadType === 'filesystem') {
|
|
form.uploadDir = config.uploadsPath
|
|
}
|
|
|
|
form.parse(req, function (err, fields, files) {
|
|
if (err || !files.image || !files.image.path) {
|
|
logger.error(`formidable error: ${err}`)
|
|
errors.errorForbidden(res)
|
|
} else {
|
|
logger.debug(`SERVER received uploadimage: ${JSON.stringify(files.image)}`)
|
|
|
|
let uploadProvider: UploadProvider
|
|
switch (config.imageUploadType) {
|
|
case 'azure':
|
|
uploadProvider = AzureUploadProvider
|
|
break
|
|
case 'filesystem':
|
|
default:
|
|
uploadProvider = FilesystemUploadProvider
|
|
break
|
|
case 'imgur':
|
|
uploadProvider = ImgurUploadProvider
|
|
break
|
|
case 'lutim':
|
|
uploadProvider = LutimUploadProvider
|
|
break
|
|
case 'minio':
|
|
uploadProvider = MinioUploadProvider
|
|
break
|
|
case 's3':
|
|
uploadProvider = S3UploadProvider
|
|
break
|
|
}
|
|
|
|
logger.debug(`imageRouter: Uploading ${files.image.path} using ${config.imageUploadType}`)
|
|
uploadProvider.uploadImage(files.image.path, function (err, url) {
|
|
if (err !== undefined) {
|
|
logger.error(err)
|
|
return res.status(500).end('upload image error')
|
|
}
|
|
logger.debug(`SERVER sending ${url} to client`)
|
|
res.send({
|
|
link: url
|
|
})
|
|
})
|
|
}
|
|
})
|
|
})
|
|
|
|
export { ImageRouter, UploadProvider }
|