2021-12-14春季学習
fileupdown (MultipartFile)
1.porm.xmlへの依存項目の追加```
<!-- file upload -->
<dependency>
commons-fileupload
commons-fileupload
1.4
```
<!-- file upload -->
<dependency>
idはmultipartResolverを使用する必要があります.ファイルアップロードに関連する他のスプリング
参照して使用します.
最大10 MB
multipartを処理するためにきっと!!設定します.
<!-- fileupload multipart-config maxSize set -->
<multipart-config>
<max-file-size>104857600</max-file-size> <!-- 10MB limit -->
<max-request-size>104857600</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
<!-- fileupload multipart-config -->
1つ目の方法]パラメータとして複数のファイルを使用する
※まず空のプロファイルにCommonsMultipartResolver空を登録する
複数のパラメータがある場合は、次のノイズを追加します.
inputtype=file以外のパラメータを受け入れる
com/kosmo/springapp/basic/e x ceptionControllerAddice付属@ResquestParam Map
※enctype="multipart/form-data" 일때
Map은 input type="file"을 받지 못한다.
또한 checkbox(여러개 선택해도) 는 하나만 받는다.
아래 어노이션으로는 MaxUploadSizeExceededException예외 처리 불가
@ControllerAddice.javaクラス内での例外処理または
現在のクラスに@ControllerAddiceを追加
@ExceptionHandler(MaxUploadSizeExceededException.class)
public String error(Model model,HttpServletRequest req) {
model.addAttribute(「maxError」、「ファイルアップロード容量が超過」).
return "fileupdown14/Upload";
}
@RequestMapping("/FileUpDown/Upload.do")
public String Upload(@RequestParam Map,//他のパラメータを受信するために使用
@RequestParamマルチセクションファイルアップロード、//type=file受信用
HttpServiceletRequest req//サーバの物理パスの取得
) throws IllegalStateException, IOException{
System.out.println(「タイトル(Map):」+map.get("title"));
System.out.println(「ヘッダー」(HttpServeretRequest):"+req.getParameter("title"));
//1]서버의 물리적 경로 얻기
String path=req.getServletContext().getRealPath("/upload");
//2]File객체 생성
File dest = new File(path+File.separator+upload.getOriginalFilename());
//3]업로드 처리
upload.transferTo(dest);
//4]리퀘스트 영역에 데이타 저장
req.setAttribute("original", upload.getOriginalFilename());
req.setAttribute("real", upload.getOriginalFilename());
req.setAttribute("type", upload.getContentType());
req.setAttribute("size", (int)Math.ceil(upload.getSize()/1024.0));
return "fileupdown14/UploadComplete";
第2の方法2]MultipartHttpServertRequestの使用
マルチセクションHttpServertRequestは、マルチセクションファイルとHttpServertRequestを組み合わせたクラスです
※type="file"name="パラメータ名"を入力した場合getFile("パラメータ名")
その他のパラメータ受信時にgetParameter(「パラメータ名」)を使用します.
@RequestMapping("/FileUpDown/Upload.do")
public String upload(@RequestParam Map map,MultipartHttpServletRequest mhsr) throws IllegalStateException, IOException{
//1]サーバの物理パスの取得
String path=mhsr.getServletContext().getRealPath("/upload");
//1-1]HttpServeretRequestオブジェクトのgetFile(「パラメータ名」)
複数のPartFileオブジェクトをメソッドで取得
MultipartFile upload= mhsr.getFile("upload");
//2]Fileオブジェクトの作成
///2-1]ファイル重複時の名前変更
String rename=FileUpDownUtils.getNewFileName(path, upload.getOriginalFilename());
File dest = new File(path+File.separator+rename);
//3]アップロード処理
upload.transferTo(dest);
//4]要求領域にデータを保存する
mhsr.setAttribute("original", upload.getOriginalFilename());
mhsr.setAttribute("real", rename);
mhsr.setAttribute("type", upload.getContentType());
mhsr.setAttribute("size", (int)Math.ceil(upload.getSize()/1024.0));
return "fileupdown14/UploadComplete";
第3の方法]コマンドオブジェクト
@RequestMapping(value="/FileUpDown/Upload.do",method=RequestMethod.POST)
public String upload(UploadCommand cmd,HttpServletRequest req) throws IllegalStateException, IOException{
//1]서버의 물리적 경로 얻기
String path=req.getServletContext().getRealPath("/upload");
//1-1]MultipartHttpServletRequest객체의 getFile("파라미터명")
메소드로 MultipartFile객체 얻기
MultipartFile upload= cmd.getUpload();
//2]File객체 생성 ]
//2-1] 파일 중복시 이름 변경
String rename=FileUpDownUtils.getNewFileName(path, upload.getOriginalFilename());
File dest = new File(path+File.separator+rename);
//3]업로드 처리
upload.transferTo(dest);
//4]리퀘스트 영역에 데이타 저장
req.setAttribute("original", upload.getOriginalFilename());
req.setAttribute("real", rename);
req.setAttribute("type", upload.getContentType());
req.setAttribute("size", (int)Math.ceil(upload.getSize()/1024.0));
return "fileupdown14/UploadComplete";
}
다운로드
Springが提供するAPIは使用されていません戻りタイプ:voidダウンロード原理を適用してWebブラウザに直接出力
@RequestMapping("/FileUpDown/Download.do")
public void download(
HttpServletRequest req,
HttpServletResponse resp,@RequestParam String filename) {
FileUpDownUtils.download(req, resp, filename, "/upload");
}
Spring API-を使用してタイプを返すにはString(文字列は空のプロファイルに登録するビューオブジェクトのid値)が必要です.public String download(Model model,HttpServletRequest req) {
컨트롤러 메소드에서는 다운로드할 파일을 모델에 저장만 하면됨]
File객체를 생성해서 모델계열에 저장만 하면 컨트롤러의 역할은 끝남.
즉 Model이나 Map이나 ModelMap으로만.
//1]파일 객체 생성
String path = req.getServletContext().getRealPath("/upload");
String filename = req.getParameter("filename");
File file= new File(path+File.separator+filename);
//2]모델에 파일객체 저장-다운로드 처리용 View객체의 메소드의 매개변수인 Map으로 전달됨
model.addAttribute("file", file);
return "downloadView";
}
Reference
この問題について(2021-12-14春季学習), 我々は、より多くの情報をここで見つけました https://velog.io/@c_jaehun_092/2021-12-14-스프링-공부テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol