単一ファイルのアップロード JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>ファイルアップロード</title>
<%
pageContext.setAttribute("contextPath", request.getContextPath());
%>
</head>
<body>
<!--
ファイルアップロードのフォーム
1. フォームの属性:enctype="multipart/form-data"
2. Spring MVCでは、設定ファイルにMultiPartResolverを定義する必要があります
-->
${uploadMessage }
<form action="${contextPath }/fileUpload" method="post" enctype="multipart/form-data">
ユーザーアバター:<input type="file" name="avatar"/><br/>
ユーザー名:<input type="text" name="userName"/><br/>
<input type="submit" value="アップロード"/>
</form>
</body>
</html>
Spring MVC設定ファイル (springmvc.xml)
<context:component-scan base-package="com.example"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--
ファイルアップロード解析器MultiPartResolverを設定します。
これはSpring MVCの主要なコンポーネントの1つです。
idは必ずmultipartResolverにする必要があります。
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="#{10 * 1024 * 1024}"></property>
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
<mvc:default-servlet-handler/>
<mvc:annotation-driven ></mvc:annotation-driven>
コントローラ
@Controller
public class FileUploadHandler {
@RequestMapping("/fileUpload")
public String handleFileUpload(@RequestParam(value="userName",required = false)String userName,
@RequestParam("avatar")MultipartFile uploadedFile,
Model viewModel) {
System.out.println("アップロードされたファイルの情報:");
System.out.println("フォーム項目名: " + uploadedFile.getName());
System.out.println("元のファイル名: " + uploadedFile.getOriginalFilename());
// ファイルを保存
try {
// 保存先のディレクトリを指定
String savePath = "C:/uploads/" + uploadedFile.getOriginalFilename();
uploadedFile.transferTo(new File(savePath));
viewModel.addAttribute("uploadMessage", "ファイルのアップロードに成功しました。");
} catch (Exception e) {
viewModel.addAttribute("uploadMessage", "ファイルのアップロードに失敗しました: " + e.getMessage());
}
return "forward:/index.jsp";
}
}
複数ファイルのアップロード JSP
<!-- 複数のファイル入力フィールドを追加します -->
ユーザーアバター1:<input type="file" name="avatar"/><br/>
ユーザーアバター2:<input type="file" name="avatar"/><br/>
ユーザー名:<input type="text" name="userName"/><br/>
<input type="submit" value="アップロード"/>
コントローラ
@Controller
public class FileUploadHandler {
@RequestMapping("/fileUpload")
public String handleFileUpload(@RequestParam(value="userName",required = false)String userName,
@RequestParam("avatar")MultipartFile[] avatarFiles,
Model viewModel) {
int successCount = 0;
for (int i = 0; i < avatarFiles.length; i++) {
MultipartFile file = avatarFiles[i];
System.out.println("ファイル " + (i+1) + " の情報:");
System.out.println("元のファイル名: " + file.getOriginalFilename());
try {
String savePath = "C:/uploads/" + file.getOriginalFilename();
file.transferTo(new File(savePath));
successCount++;
} catch (Exception e) {
viewModel.addAttribute("uploadMessage", "一部のファイルのアップロードに失敗しました: " + e.getMessage());
}
}
if(successCount > 0) {
viewModel.addAttribute("uploadMessage", "合計 " + successCount + " 個のファイルがアップロードされました。");
}
return "forward:/index.jsp";
}
}