(메모) Spring MVC 학습 지침파일 업로드
17909 단어 SpringMVC
표 에는 file 형식의 input 요 소 를 포함 해 야 합 니 다. 단 추 를 누 르 면 파일 을 선택 하 는 대화 상 자 를 엽 니 다.HTML 5 이전에 여러 파일 을 업로드 하려 면 여러 파일 input 요 소 를 사용 해 야 합 니 다.그러나 HTML 5 에 서 는 input 요소 에 여러 개의 multiple 속성 을 도입 함으로써 여러 파일 의 업로드 가 더욱 쉬 워 집 니 다.HTML 5 에서 다음 줄 의 코드 를 작성 하면 여러 파일 을 선택 할 수 있 는 단 추 를 만 들 수 있 습 니 다.
type="file" name="fieldName" multiple/>
type="file" name="fieldName" multiple="multiple"/>
type="file" name="fieldName" multiple=""/>
2. MultipartFile 인 터 페 이 스 는 Spring MVC 에서 이미 업로드 한 파일 을 처리 하 는 것 이 매우 쉽다.Spring MVC 프로그램 에 올 린 파일 은 MultipartFile 대상 에 포 함 됩 니 다.유일한 임 무 는 MultipartFile 의 속성 으로 domain 클래스 를 만 드 는 것 입 니 다.org. springframework. web. multipatFile 인 터 페 이 스 는 다음 과 같은 방법 을 가지 고 있 습 니 다. byte [] getBytes () 는 바이트 배열 로 파일 의 내용 을 되 돌려 줍 니 다.String getContentType () 은 파일 의 내용 형식 을 되 돌려 줍 니 다.InputStream getInputStream () 은 InputStream 을 되 돌려 파일 의 내용 을 읽 습 니 다.String getName () 은 인자 의 이름 을 여러 부분 으로 되 돌려 줍 니 다.String getOriginal Filename () 클 라 이언 트 로 컬 드라이브 의 초기 파일 이름 을 되 돌려 줍 니 다.long getSize () 는 바이트 단위 로 파일 의 크기 를 되 돌려 줍 니 다.boolean isEmpty () 는 업 로드 된 파일 이 비어 있 는 지 여 부 를 표시 합 니 다.void transferTo (File destination) 는 업로드 한 파일 을 대상 디 렉 터 리 에 저장 합 니 다.3. Commons FileUpload 로 파일 을 업로드 하려 면 Spring MVC 설정 파일 에서 multipart Resolver bean 을 정의 해 야 합 니 다.
id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="2000000" />
4. 도 메 인 류 는 유형 이 4. 567914 인 images 속성 을 가진다.
package app11a.domain;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import org.springframework.web.multipart.MultipartFile;
import com.sun.istack.internal.NotNull;
public class Product implements Serializable
{
private static final long serialVersionUID = -164834188493691288L;
@NotNull
@Size(min = 1, max = 10)
private String name;
@NotNull
private String description;
private Float price;
@Past
private Date productionDate;
private List images;
...
5. 컨트롤 러 가 업로드 한 파일 을 저장 하 는 것 은 매우 쉬 운 일이 다. MultipartFile 에서 transferTo 방법 을 호출 하기 만 하면 된다.
package app11a.controller;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import app11a.domain.Product;
@Controller
public class ProductController
{
private static final Log logger = LogFactory.getLog(ProductController.class);
@RequestMapping(value = "/product_input")
public String inputProduct(Model model)
{
model.addAttribute("product", new Product());
return "ProductForm";
}
@RequestMapping(value = "/product_save")
public String saveProduct(HttpServletRequest servletRequest,
@Valid @ModelAttribute Product product, BindingResult bindingResult,
Model model)
{
if (bindingResult.hasErrors())
{
FieldError fieldError = bindingResult.getFieldError();
logger.info("Code:" + fieldError.getCode() + ",field:" + fieldError.getField());
return "ProductForm";
}
List files = product.getImages();
List fileNames = new ArrayList();
if (null != files && files.size() > 0)
{
for (MultipartFile multipartFile : files)
{
String fileName = multipartFile.getOriginalFilename();
fileNames.add(fileName);
File imageFile = new File(getPath(servletRequest), fileName);
try
{
multipartFile.transferTo(imageFile);
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
// save product here
model.addAttribute("product", product);
return "ProductDetails";
}
private String getPath(HttpServletRequest servletRequest)
{
String pathUrl = servletRequest.getServletContext().getRealPath("/image");
File path = new File(pathUrl);
if (!path.exists() || !path.isDirectory())
{
path.mkdir();
}
return pathUrl;
}
}
6. 프로필 은 multipartResolver bean 의 max UploadSize 속성 을 이용 하여 받 아들 일 수 있 는 최대 파일 용량 을 설정 할 수 있 습 니 다.이 속성 을 설정 하지 않 으 면 최대 파일 용량 제한 이 없습니다.파일 용량 에 제한 이 없다 고 해서 임의의 크기 의 파일 을 업로드 할 수 있 는 것 은 아니다.너무 큰 파일 을 업로드 하 는 데 시간 이 오래 걸 리 면 서버 가 시간 을 초과 할 수 있 습 니 다.초대형 파일 문 제 를 처리 하기 위해 서 는 HTML 5 File API 를 이용 해 파일 을 슬라이스 한 다음 각각 업로드 할 수 있다.9. Servlet 3 과 더 높 은 버 전 으로 파일 을 업로드 합 니 다. Servlet 3 이 있 으 면 Commons FileUpload 와 Commons IO 소자 가 필요 없습니다.Servlet 3 및 그 이상 버 전의 용기 에서 서버 엔 드 파일 을 업로드 하 는 프로 그래 밍 은 레이 블 형식 MultipartConfig 와 javax. servlet. http. Part 인 터 페 이 스 를 중심 으로 진행 되 었 습 니 다.업 로드 된 파일 을 처리 하 는 Servlets 는 @ MultipartConfig 로 표시 해 야 합 니 다.다음은 MultipartConfig 레이 블 형식 에 나타 날 수 있 는 속성 입 니 다. 모두 선택 할 수 있 습 니 다: max FileSize: 파일 업로드 의 최대 용량, 기본 값 은 - 1 로 제한 이 없 음 을 표시 합 니 다.지정 한 값 보다 큰 파일 은 거부 당 합 니 다.maxRequestSize: 여러 부분의 HTTP 요청 이 허용 하 는 최대 용량 을 표시 합 니 다. 기본 값 은 - 1 로 제한 이 없 음 을 표시 합 니 다.location: Part 에서 write 방법 을 호출 할 때 업로드 한 파일 을 디스크 에 저장 하 는 위 치 를 표시 합 니 다.fileSizeThreshold: 이 용량 의 경 계 를 초과 하여 파일 을 업로드 할 때 디스크 에 기 록 됩 니 다.Spring MVC 의 Dispatcher Servlet 은 대부분의 요청 이나 모든 요청 을 처리 합 니 다.안 타 깝 게 도 소스 코드 를 수정 하지 않 으 면 Servlet 에 표시 할 수 없습니다.그러나 다행스럽게도 Servlet 3 에는 Servlet 을 Multipart Config Servlet 으로 만 드 는 비교적 쉬 운 방법 이 있 습 니 다. 즉, 배치 설명자 (web. xml) 의 Servlet 성명 에 값 을 부여 할 수 있 습 니 다.다음 코드 는 @ MultipartConfig 로 Dispatcher Servlet 에 표시 하 는 효과 와 같 습 니 다.
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<max-file-size>20848820</max-file-size>
<max-request-size>418018841</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
</servlet>
이 밖 에 Spring MVC 부품 파일 에 여러 부분 해석 기 를 사용 해 야 합 니 다. 아래 와 같이:
id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver" />
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ssm 프레임워크 업로드 이미지 로컬 및 데이터베이스에 저장 예시본고는 ssm 프레임워크 업로드 이미지를 로컬과 데이터베이스에 저장하는 예시를 소개하고 주로 Spring+SpringMVC+MyBatis 프레임워크를 사용하여 ssm 프레임워크 업로드 이미지의 실례를 실현했다. 구체...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.