Springフレーム環境でファイルのアップロードしてみます。
まず、
fileuploadを検索した結果です。
commons-fileuploadのバージョン名をクリックします。
私はApacheメイブンを使用します。なので私のコードをコピーして、pom.xmlに付けます
そのコードです。
その後dispatcher-servlet.xmlを開いてください。
(intellijの場合servlet-context.xmlです)
Springがマルチパートの領域を管理するようビーンに設定しておきます。
じゃ、コードを作成してみます。
jspを作って以下のようなコードを作成してみました。
enctypeを使いマルチパートのオプションを与えました。
このコードの結果は以下です。
「ファイルを選択」をクリックすると、以下のようなウィンドウが浮かびます。
適当なイメージファイルを選択します。
そしてpostコントローラを以下のように実装しました。
まず、Springがファイルを受け取れるようにパラメーターが宣言しました。
次に、サーバー上のファイルの名前が重なることを防止するため
uuidを使用して、ファイル名の前にランダム文字を差し込んで保存するようにしました。
そして、ファイルのパスと名前を指定するために
saveFileという殻ファイルを作成し、アップロードしたファイルにtransferToメソッドを利用して、
殻をかぶせました。
transferToの代わり、上記のメソッドを使用しても構いません。
下はUPLOAD_PATHは保存パスです。
こうすれば
上記のコードを少し変えました。
jspに送るmodelオブジェクトをパラメータとして宣言し
saveFileメソッドの戻りデータがnull(アップロードに失敗)の場合、
modelにattributeをfailに追加し、成功した場合(nullでない場合)は、result(ファイルの名前)を送信します。
こうすれば、受け取るjspで以下のようなコードで、結果を確認できます。
結果
commons-fileuploadのバージョン名をクリックします。
私はApacheメイブンを使用します。なので私のコードをコピーして、pom.xmlに付けます
そのコードです。
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
その後dispatcher-servlet.xmlを開いてください。
(intellijの場合servlet-context.xmlです)
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
Springがマルチパートの領域を管理するようビーンに設定しておきます。
じゃ、コードを作成してみます。
jspを作って以下のようなコードを作成してみました。
<h1>File Upload</h1>
<form action="fileupload", method="post" enctype="multipart/form-data">
<input type="file", name="uploadfile" placeholder="choose file" /><br/>
<input type="submit" value="upload">
</form>
このコードの結果は以下です。
「ファイルを選択」をクリックすると、以下のようなウィンドウが浮かびます。
適当なイメージファイルを選択します。
そしてpostコントローラを以下のように実装しました。
@RequestMapping(value = "/fileupload",method = RequestMethod.POST)
public void upload(MultipartFile uploadfile){
saveFile(uploadfile);
}
private String saveFile(MultipartFile file){
UUID uuid = UUID.randomUUID();
String saveName = uuid + "_" + file.getOriginalFilename();
File saveFile = new File(UPLOAD_PATH,saveName);
try {
file.transferTo(saveFile);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return saveName;
}
まず、Springがファイルを受け取れるようにパラメーターが宣言しました。
次に、サーバー上のファイルの名前が重なることを防止するため
uuidを使用して、ファイル名の前にランダム文字を差し込んで保存するようにしました。
そして、ファイルのパスと名前を指定するために
saveFileという殻ファイルを作成し、アップロードしたファイルにtransferToメソッドを利用して、
殻をかぶせました。
FileCopyUtils.copy(file.getBytes(),saveFile);
transferToの代わり、上記のメソッドを使用しても構いません。
下はUPLOAD_PATHは保存パスです。
private static final String UPLOAD_PATH = "C:\\Study\\fileupload";
@RequestMapping(value = "/fileupload",method = RequestMethod.POST)
public void upload(MultipartFile uploadfile, Model model){
String result = saveFile(uploadfile);
if(result !=null){
model.addAttribute("result", result);
} else {
model.addAttribute("result","fail");
}
}
上記のコードを少し変えました。
jspに送るmodelオブジェクトをパラメータとして宣言し
saveFileメソッドの戻りデータがnull(アップロードに失敗)の場合、
modelにattributeをfailに追加し、成功した場合(nullでない場合)は、result(ファイルの名前)を送信します。
こうすれば、受け取るjspで以下のようなコードで、結果を確認できます。
<script>
$(document).ready(function () {
if(${not empty result}){
alert('${result} 파일 저장 성공');
} else {
alert('파일 저장 실패');
}
})
</script>
結果
댓글 없음:
댓글 쓰기