[SPRING]アイランドネイル画像を生成してスクリーン処理する-(4)
画像は正常にアップロードされていますが、元の画像がそのままの場合、大量のデータが消費されるため、可能な場合はサムネイルを作成して送信し、元の画像を表示しようとすると元のファイルが表示されます.(特に、リストページの画像が多くなるので注意が必要です.)
にアップロードされたファイルを保存し、サムネイルライブラリを使用してサムネイルファイルを作成します. 島のネイルアートファイルは、ファイルの先頭に「s」を付けて普通のファイルを区別します. UploadResultDTOにgetThumbnail URL()を追加し、島の経路を アイランドネイルを扱うためにjavaを使用します.imageioパッケージも使用できますが、プロジェクトはThumbnaillatorライブラリを使用します. Thumbnaillatorはわずかなコードでサムネイルを作成し、横寸法と縦寸法を決定する際に比例して調整できる便利な機能を提供します. Thumbnaillatorライブラリ:https://github.com/coobird/thumbnailator build.gradeファイルにThumbnaillatorを追加します. Upload Controller Thumbnaillatorのインポート後にtry-catchセクションが変更されます.
コードの変更処理は、3行程度、幅または深さ100 pxサイズのサムネイルを生成する. ブラウザからファイルをアップロードすると、次の図のように生成された元の画像がサムネイルファイルと同じになります.
で生成されたサムネイルは「s」で始まり、ファイルサイズは相対的に小さい.
生成されたサムネイルは、アップロードされたファイルと同名であるため、区別が難しくない. JSONに送信されたUploadResultDTOには、getImgURL()などの島名のリンクを処理する方法が追加されています. なぜDTOでメソッドを定義するときにgetImageURL、getThumbnail URLとして定義されるのか、メソッドにアクセスするときにのみ定義されるのか.imageURLですか、thumbnail URLですか. なぜvoid型ではなくString型を宣言し、「リターン価格として」与えたのでしょうか.
1.JSでは、getterはJavaで知っているものとは少し違います.
2.メソッドの前にgetキーワードを使用して定義します.(なぜgetで始まるのか)
3.メソッド名はクラスのプロパティとして使用できます.
4.パラメータは空で、パラメータを返す必要があります.(Stringタイプ、戻り理由は")に追加されたgetThumbnail URL()はgetImageURL()とほぼ同じで、真ん中に「s」が追加されています. UploadEx.コードを変更してhtmlにサムネイル画像を表示します. によれば、ファイルアップロードの結果、以下のサムネイルのみが追加されたことがわかります.(アップロードされたファイルの画像の割合も自動的に調整されます.)
サムネイル画像処理プロセス
<img>
タグとして処理します.サムネイルライブラリ
implementation group: 'net.coobird', name: 'thumbnailator', version: '0.4.14'
@RestController
@Log4j2
public class UploadController {
@Value("${part4.upload.path}") //application.properties의 변수
private String uploadPath;
@PostMapping("/uploadAjax")
public ResponseEntity<List<UploadResultDTO>> uploadFile(MultipartFile[] uploadFiles) {
List<UploadResultDTO> resultDTOList = new ArrayList<>();
for (MultipartFile uploadFile : uploadFiles) {
// 이미지 파일만 업로드 가능
if(uploadFile.getContentType().startsWith("image") == false){
// 이미지가 아닌경우 403 Forbidden 반환
return new ResponseEntity<>(HttpStatus.FORBIDDEN);
}
// 실제 파일 이름 IE나 Edge는 전체 경로가 들어오므로
String originalName = uploadFile.getOriginalFilename();
String fileName = originalName.substring(originalName.lastIndexOf("\\") + 1);
log.info("fileName: "+fileName);
// 날짜 폴더 생성
String folderPath = makeFolder();
//UUID
String uuid = UUID.randomUUID().toString();
//저장할 파일 이름
String saveName = uploadPath + File.separator + folderPath + File.separator + uuid +"_"+ fileName;
Path savePath = Paths.get(saveName);
<----------------수정할부분--------------->
try {
//원본 파일 저장
uploadFile.transferTo(savePath);
//섬네일 생성 (섬네일 파일 이름은 중간에 "s_"로 시작하도록)
String thumbnailSaveName = uploadPath + File.separator + folderPath + File.separator
+ "s_" + uuid + fileName;
File thumbnailFile = new File(thumbnailSaveName);
Thumbnailator.createThumbnail(savePath.toFile(), thumbnailFile,100,100);
resultDTOList.add(new UploadResultDTO(fileName,uuid,folderPath));
}catch (IOException e){
e.printStackTrace();
</--------------------------------------------/>
}
}
ブラウザでのサムネイルの処理
生成された
public String getImageURL(){ //추후에 전체 경로가 필요한 경우를 대비하여 생성
try{
return URLEncoder.encode(folderPath+"/"+uuid+"_"+fileName,"UTF-8");
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}
return "";
}
public String getThumbnailURL(){
try{
return URLEncoder.encode(folderPath+"/s_"+uuid+"_"+fileName,"UTF-8");
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}
return "";
}
ここで疑問点についての知識を学びました
解決する
1.JSでは、getterはJavaで知っているものとは少し違います.
2.メソッドの前にgetキーワードを使用して定義します.(なぜgetで始まるのか)
3.メソッド名はクラスのプロパティとして使用できます.
4.パラメータは空で、パラメータを返す必要があります.(Stringタイプ、戻り理由は")
// 추가
// Ajax 업로드 이후 이미지들을 호출하는 함수
function showUploadedImage(arr){
console.log(arr);
var divArea = $(".uploadResult");
for(var i =0; i<arr.length; i++){
divArea.append("<img src='/display?fileName=" + arr[i].thumbnailURL+"'>");
//imageURL을 thumbnailURL로 변경
}
}
上記のコードReference
この問題について([SPRING]アイランドネイル画像を生成してスクリーン処理する-(4)), 我々は、より多くの情報をここで見つけました https://velog.io/@jyyoun1022/SPRING섬네일-이미지-생성과-화면-처리-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol