hw : Notice & Reply, Board & Reply + IMAGE 


AWS Image Upload


Basic Configuration


build.gradle

// aws s3

implementation 'com.amazonaws:aws-java-sdk-s3:1.12.716'


application.properties

# aws

cloud.aws.s3.endpoint=https://hisinstitute.s3.ap-northeast-2.amazonaws.com



S3Config.java


package com.example.adminproject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
@Configuration
public class S3Config {
@Value("YOURS")
private String awsAccessKey;

@Value("YOURS")
private String awsSecretKey;

@Value("YOURS")
private String region;

@Bean
public AmazonS3 s3client() {

BasicAWSCredentials awsCreds = new BasicAWSCredentials(awsAccessKey,awsSecretKey);

return AmazonS3ClientBuilder.standard()
.withRegion(Regions.fromName(region))
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
}
}



S3Service

package com.example.adminproject;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.PutObjectRequest;
@Service
public class S3Service {

@Autowired
private AmazonS3 amazonS3;
@Value("YOURS")
private String bucketName;

public void uploadFile(MultipartFile multipartFile, String filename) throws IOException {
File file = new File(multipartFile.getOriginalFilename());

try (FileOutputStream fos = new FileOutputStream(file)){
fos.write(multipartFile.getBytes());
}
amazonS3.putObject(new PutObjectRequest(bucketName, filename, file));

file.delete();
}


}




Create.html


<form class="mb-9" action="/product/create" method="post" enctype="multipart/form-data">



<input name="image" type="file" />



Controller.java


@PostMapping("/create")
public String create(Product product,
@RequestParam("image") MultipartFile file
) {

productService.create(product, file);

return "redirect:/product/readlist";
}



Service.java


@Override
public void create(Product product, MultipartFile file) {

UUID uuid = UUID.randomUUID();
String fileName = uuid + "_" + file.getOriginalFilename();

try {
s3Service.uploadFile(file, fileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

product.setPimg(fileName);
product.setPdate(LocalDateTime.now());
productRepository.save(product);
}




View






@Value("${cloud.aws.s3.endpoint}")
private String path;





@GetMapping("/readdetail/{pid}")
public String readdetail(@PathVariable ("pid") Integer pid, Model model) {

model.addAttribute("product", productService.readdetail(pid));
model.addAttribute("path", path);

return "product/readdetail";
}




readdetail.html


<img th:src="@{|${path}/${product.pimg}|}">






한국정보시스템개발원 |
Hankook Information System Institute

austiny@snu.ac.kr / austiny@gatech.edu