Upload
@adminjs/upload
$ yarn add @adminjs/uploadinterface IFile {
id: number;
s3Key: string;
bucket: string;
mime: string;
comment: string | null;
}Last updated
@adminjs/upload
$ yarn add @adminjs/uploadinterface IFile {
id: number;
s3Key: string;
bucket: string;
mime: string;
comment: string | null;
}Last updated
import * as url from 'url'
// other imports
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
app.use(express.static(path.join(__dirname, '../public')));import uploadFeature from '@adminjs/upload';
import { File } from './models/file.js';
import componentLoader from './component-loader.js';
const localProvider = {
bucket: 'public/files',
opts: {
baseUrl: '/files',
},
};
export const files = {
resource: File,
options: {
properties: {
s3Key: {
type: 'string',
},
bucket: {
type: 'string',
},
mime: {
type: 'string',
},
comment: {
type: 'textarea',
isSortable: false,
},
},
},
features: [
uploadFeature({
componentLoader,
provider: { local: localProvider },
validation: { mimeTypes: ['image/png', 'application/pdf', 'audio/mpeg'] },
}),
],
};import uploadFeature from '@adminjs/upload';
import { File } from './models/file.js';
import componentLoader from './component-loader.js';
const AWScredentials = {
accessKeyId: 'AWS_ACCESS_KEY_ID',
secretAccessKey: 'AWS_SECRET_ACCESS_KEY',
region: 'AWS_REGION',
bucket: 'AWS_BUCKET',
};
export const files = {
resource: File,
options: {
properties: {
s3Key: {
type: 'string',
},
bucket: {
type: 'string',
},
mime: {
type: 'string',
},
comment: {
type: 'textarea',
isSortable: false,
},
},
},
features: [
uploadFeature({
componentLoader,
provider: { aws: AWScredentials },
validation: { mimeTypes: ['application/pdf'] },
}),
],
};import uploadFeature from '@adminjs/upload';
import { File } from './models/file.js';
import componentLoader from './component-loader.js';
const GCScredentials = {
serviceAccount: 'SERVICE_ACCOUNT',
bucket: 'GCP_STORAGE_BUCKET',
expires: 0,
};
export const files = {
resource: File,
options: {
properties: {
s3Key: {
type: 'string',
},
bucket: {
type: 'string',
},
mime: {
type: 'string',
},
comment: {
type: 'textarea',
isSortable: false,
},
},
},
features: [
uploadFeature({
componentLoader,
provider: { gpc: GCScredentials },
validation: { mimeTypes: ['image/png'] },
}),
],
};import { files } from './resources/files.js';
const adminJsOptions = {
resources: [
//...
files
],
//...
}import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
@Entity({ name: 'files' })
export class File extends BaseEntity {
@PrimaryGeneratedColumn()
public id: number;
@Column({ name: 's3_key', nullable: true, type: 'jsonb' })
public s3Key: string;
@Column({ nullable: true, type: 'jsonb' })
public bucket: string;
@Column({ nullable: true, type: 'jsonb' })
public mime: string;
@Column({ nullable: true, type: 'text' })
public comment: string;
@CreateDateColumn({ name: 'created_at' })
public createdAt: Date;
@UpdateDateColumn({ name: 'updated_at' })
public updatedAt: Date;
}
import uploadFeature from '@adminjs/upload';
import { File } from './models/file.js';
const localProvider = {
bucket: 'public/files',
baseUrl: '/files',
};
export const files = {
resource: File,
options: {
properties: {
s3Key: {
type: 'string',
isArray: true,
},
bucket: {
type: 'string',
isArray: true,
},
mime: {
type: 'string',
isArray: true,
},
comment: {
type: 'textarea',
isSortable: false,
},
},
},
features: [
uploadFeature({
provider: { local: localProvider },
multiple: true,
validation: { mimeTypes: ['image/png', 'application/pdf', 'audio/mpeg'] },
}),
],
};