Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,22 @@
"author": "",
"license": "ISC",
"dependencies": {
"aws-sdk": "^2.782.0",
"axios": "^0.21.0",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"express-validator": "^6.6.1",
"log4js": "^6.3.0"
"log4js": "^6.3.0",
"multer": "^1.4.2",
"node-poppler": "^1.8.5",
"rimraf": "^3.0.2",
"uuidv4": "^6.2.4"
},
"devDependencies": {
"@types/cors": "^2.8.8",
"@types/express": "^4.17.8",
"@types/multer": "^1.4.4",
"@typescript-eslint/eslint-plugin": "^4.4.1",
"@typescript-eslint/parser": "^4.4.1",
"eslint": "^7.11.0",
Expand Down
29 changes: 29 additions & 0 deletions src/modules/awsUpload.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import AWS from 'aws-sdk';
import 'dotenv/config';
import { uuid } from 'uuidv4';

let undefinedValue : AWS.S3.ManagedUpload.ManagedUploadOptions;

AWS.config.update({
accessKeyId: process.env.accessKeyId,
secretAccessKey: process.env.secretAccessKey
});
const s3 = new AWS.S3();

const awsUpload = (file, base64data) => {
return new Promise((resolve) => {
const params = {
Bucket: 'connect-class-test',
Key: `${Date.now() + uuid()}.png`,
Body: base64data,
ACL: 'public-read'
};
s3.upload(params, undefinedValue, (err, res) => {
if (!err) {
resolve(res.Location);
}
});
});
};

export default awsUpload;
10 changes: 10 additions & 0 deletions src/modules/directoryMake.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import fs from 'fs';

const makeDir = (req,res, next) => {
if (!fs.existsSync(`${__dirname}/../uploads`)) {
fs.mkdirSync(`${__dirname}/../uploads`);
}
next();
};

export default makeDir;
8 changes: 8 additions & 0 deletions src/modules/getArray.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import upload from './getUrl';

async function getArray(filePath) {
const result = await upload(filePath);
return result;
}

export default getArray;
30 changes: 30 additions & 0 deletions src/modules/getUrl.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import fs from 'fs';
import awsUpload from './awsUpload';

// reg ex to match
const re = /\.png$/;

const upload = async (name) => {
const result : any = [];
const test = fs.readdirSync(`${__dirname}/../${name}/`);
const matches = test.filter((text) => {
return re.test(text);
});
const numFiles = matches.length;
if (numFiles) {
for (let i = 0; i < numFiles; i += 1) {
const file = matches[i];
const filePath = `${__dirname}/../${name}/${file}`;
// console.log(filePath);
const str = fs.readFileSync(filePath);
// Buffer Pattern; how to handle buffers; straw, intake/outtake analogy
const base64data = Buffer.from(str);
// eslint-disable-next-line no-await-in-loop
const url = await awsUpload(file, base64data);
result.push(url);
}
}
return result;
};

export default upload;
16 changes: 16 additions & 0 deletions src/modules/multer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import multer from 'multer';

const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'src/uploads/');
},
filename: (req, file, cb) => {
cb(null, file.originalname);
}
});
const upload = multer({
dest: 'src/uploads/',
storage
});

export default upload;
4 changes: 2 additions & 2 deletions src/routes/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { Router } from 'express';
import userAPI from './user';
import uploadAPI from './upload';

const router = Router();

router.use('/', userAPI);
router.use('/', uploadAPI);

export default router;
43 changes: 43 additions & 0 deletions src/routes/upload.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { Router } from 'express';
import fs from 'fs';
import rimraf from 'rimraf';
import { Poppler } from 'node-poppler';
import getArray from '../modules/getArray';
import upload from '../modules/multer';
import makeDir from '../modules/directoryMake';

const router = Router();

router.post('/upload', makeDir, upload.any(), async (req, res) => {
const { filename } = req.files[0];
const poppler = new Poppler();
const file = `./src/uploads/${filename}`;
const options = {
firstPageToConvert: 1,
pngFile: true,
};

const outputFile = `${__dirname}/../uploads/test`;
await poppler.pdfToCairo(options, file, outputFile)
.then(async () => {
fs.unlink(file, (err) => {
if (err) throw err;
});
})
.then(async () => {
const result = await getArray('uploads');
// 디렉터리 삭제
rimraf(`${__dirname}/../uploads`, () => {
console.log('done');
});
res.json({
success: true,
data: result
});
})
.catch((err) => {
console.error(err);
});
});

export default router;
9 changes: 0 additions & 9 deletions src/routes/user.ts

This file was deleted.

1 change: 1 addition & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"esModuleInterop": true,
"resolveJsonModule": true,
"strictNullChecks": true,
"noImplicitAny": false,
"outDir": "dist"
},
"exclude": [
Expand Down
Loading