@Override
@Transactional
public Object downloadTransactionTallowEvidence(Member member, long id) {
// 중복 확인
int check = transactionRepository.checkTallowEvidence(id);
String fileName;
String originFileName;
if(check == 0) {
// transaction title 조회
String title = transactionRepository.getTransactionTitle(id);
// 특수 문자를 언더스코어로 대체
originFileName = title.replaceAll("[\\\\/:*?\"<>|]", "");
// 공백을 언더스코어로 대체
originFileName = originFileName.replaceAll("\\s", "_");
originFileName += "_tallow.zip";
fileName = UUID.randomUUID().toString() + ".zip";
// tallow_transaction_id로 tallow 목록 가져오기
List<TallowDto.GetTallow> list = transactionRepository.getTransactionTallows(id);
// zip 파일 생성
ByteArrayOutputStream zipOutputStream = new ByteArrayOutputStream();
try (ZipOutputStream out = new ZipOutputStream(zipOutputStream)) {
for(TallowDto.GetTallow tallow : list) {
S3Object s3Object = amazonS3.getObject(new GetObjectRequest(bucket, tallow.getTallowEvidence()));
S3ObjectInputStream objectInputStream = s3Object.getObjectContent();
byte[] objectBytes = IOUtils.toByteArray(objectInputStream);
// 각 객체를 zip에 추가
ZipEntry zipEntry = new ZipEntry(tallow.getTallowEvidence());
out.putNextEntry(zipEntry);
out.write(objectBytes);
out.closeEntry();
}
}
catch (IOException e) {
e.printStackTrace();
}
byte[] zipBytes = zipOutputStream.toByteArray();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(zipBytes);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(zipBytes.length);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileName, byteArrayInputStream, metadata);
putObjectRequest.setCannedAcl(CannedAccessControlList.PublicRead);
// zip 파일 s3 upload
PutObjectResult awsResult = amazonS3.putObject(putObjectRequest);
TallowTransactionFilesDto.PostTallowTransactionFiles file = TallowTransactionFilesDto.PostTallowTransactionFiles.builder()
.tallowTransactionId(id)
.fileName(fileName)
.originFileName(originFileName)
.type("TALLOW")
.fileType("ZIP")
.build();
int dbResult = transactionRepository.insertTransactionFile(file);
}
else {
TallowTransactionFilesDto.GetTallowTransactionFiles file = transactionRepository.getTallowTransactionFiles(id);
fileName = file.getFileName();
originFileName = file.getOriginFileName();
}
// aws pre-signed url 생성
GeneratePresignedUrlRequest generatePresignedUrlRequest = getGeneratePreSignedUrlRequest(bucket, fileName, originFileName);
URL url = amazonS3.generatePresignedUrl(generatePresignedUrlRequest);
// pre-signed url 메일 전송
try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setFrom("support@recycleledger.com");
helper.setSubject("File download information");
helper.setTo(member.getEmail());
Context context = new Context();
context.setVariable("downloadUrl", url);
helper.setText(templateEngine.process("mail/file-download", context), true);
javaMailSender.send(message);
}
catch (MessagingException e) {
e.printStackTrace();
}
return null;
}
@Override
@Transactional
public URL downloadTransactionTallowEvidence(Member member, long id) {
// 중복 확인
int check = transactionRepository.checkTallowEvidence(id);
String fileName;
String originFileName;
if(check == 0) {
// transaction title 조회
String title = transactionRepository.getTransactionTitle(id);
// 특수 문자를 언더스코어로 대체
originFileName = title.replaceAll("[\\\\/:*?\"<>|]", "");
// 공백을 언더스코어로 대체
originFileName = originFileName.replaceAll("\\s", "_");
originFileName += "_tallow.zip";
fileName = UUID.randomUUID().toString() + ".zip";
// tallow_transaction_id로 tallow 목록 가져오기
List<TallowDto.GetTallow> list = transactionRepository.getTransactionTallows(id);
// zip 파일 생성
ByteArrayOutputStream zipOutputStream = new ByteArrayOutputStream();
try (ZipOutputStream out = new ZipOutputStream(zipOutputStream)) {
for(TallowDto.GetTallow tallow : list) {
S3Object s3Object = amazonS3.getObject(new GetObjectRequest(bucket, tallow.getTallowEvidence()));
S3ObjectInputStream objectInputStream = s3Object.getObjectContent();
byte[] objectBytes = IOUtils.toByteArray(objectInputStream);
// 각 객체를 zip에 추가
ZipEntry zipEntry = new ZipEntry(tallow.getTallowEvidence());
out.putNextEntry(zipEntry);
out.write(objectBytes);
out.closeEntry();
}
}
catch (IOException e) {
e.printStackTrace();
}
byte[] zipBytes = zipOutputStream.toByteArray();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(zipBytes);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(zipBytes.length);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileName, byteArrayInputStream, metadata);
putObjectRequest.setCannedAcl(CannedAccessControlList.PublicRead);
// zip 파일 s3 upload
PutObjectResult awsResult = amazonS3.putObject(putObjectRequest);
TallowTransactionFilesDto.PostTallowTransactionFiles file = TallowTransactionFilesDto.PostTallowTransactionFiles.builder()
.tallowTransactionId(id)
.fileName(fileName)
.originFileName(originFileName)
.type("TALLOW")
.fileType("ZIP")
.build();
int dbResult = transactionRepository.insertTransactionFile(file);
}
else {
TallowTransactionFilesDto.GetTallowTransactionFiles file = transactionRepository.getTallowTransactionFiles(id);
fileName = file.getFileName();
originFileName = file.getOriginFileName();
}
// aws pre-signed url 생성
GeneratePresignedUrlRequest generatePresignedUrlRequest = getGeneratePreSignedUrlRequest(bucket, fileName, originFileName);
URL url = amazonS3.generatePresignedUrl(generatePresignedUrlRequest);
// pre-signed url 메일 전송
// try {
// MimeMessage message = javaMailSender.createMimeMessage();
// MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
// helper.setFrom("support@recycleledger.com");
// helper.setSubject("File download information");
// helper.setTo(member.getEmail());
//
// Context context = new Context();
// context.setVariable("downloadUrl", url);
//
// helper.setText(templateEngine.process("mail/file-download", context), true);
//
// javaMailSender.send(message);
// }
// catch (MessagingException e) {
// e.printStackTrace();
// }
return url;
}
'한달인턴' 카테고리의 다른 글
동대문닭한마리 예시 (0) | 2025.01.14 |
---|---|
데이터베이스 정규화(Normalization), 역정규화(DeNormalization) (0) | 2024.12.05 |