grand commit
This commit is contained in:
67
lib/config/resources.ts
Normal file
67
lib/config/resources.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import {ResourceType} from '@prisma/client'
|
||||
import im, {Features} from 'imagemagick'
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
|
||||
import {db} from '@/lib/db/prisma/client'
|
||||
|
||||
export const PUBLIC_UPLOAD_PRODUCTS_DIR = '/uploads/products'
|
||||
export const UPLOAD_PRODUCTS_DIR = path.resolve(
|
||||
`./public${PUBLIC_UPLOAD_PRODUCTS_DIR}`
|
||||
)
|
||||
|
||||
export function getFilesByProductId(id: number, fullPath: boolean = true) {
|
||||
const files = fs
|
||||
.readdirSync(UPLOAD_PRODUCTS_DIR)
|
||||
.filter(file => file.startsWith(`${id}-`))
|
||||
|
||||
return !fullPath
|
||||
? files
|
||||
: files.map(file => path.join(UPLOAD_PRODUCTS_DIR, file))
|
||||
}
|
||||
|
||||
interface ProductImage {
|
||||
type: string
|
||||
productId: number
|
||||
filesize: number
|
||||
height: number
|
||||
width: number
|
||||
'mime type'?: string
|
||||
mimeType: string
|
||||
quality: number
|
||||
properties: {
|
||||
signature: string
|
||||
}
|
||||
signature: string
|
||||
}
|
||||
|
||||
export async function getMetaOfFile(id: number) {
|
||||
getFilesByProductId(id).forEach(file => {
|
||||
im.identify(file, async (err, features) => {
|
||||
if (err) throw err
|
||||
// { format: 'JPEG', width: 3904, height: 2622, depth: 8 }
|
||||
const data = features as ProductImage
|
||||
|
||||
try {
|
||||
const result = await db.productResource.create({
|
||||
data: {
|
||||
type: 'IMAGE' as ResourceType,
|
||||
productId: id,
|
||||
uri: PUBLIC_UPLOAD_PRODUCTS_DIR + '/' + path.basename(file),
|
||||
filesize: parseInt(data.filesize as unknown as string),
|
||||
height: data.height,
|
||||
width: data.width,
|
||||
quality: data.quality,
|
||||
mimeType: data['mime type'] || 'image/*',
|
||||
signature: data.properties.signature
|
||||
//meta: features
|
||||
}
|
||||
})
|
||||
|
||||
//return result
|
||||
} catch (e) {
|
||||
//console.log(e)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user