package com.u2ware.springfield.sample.others.upload; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Transient; import lombok.Getter; import lombok.Setter; import org.springframework.web.multipart.MultipartFile; import com.u2ware.springfield.config.Springfield; import com.u2ware.springfield.config.Springfield.Strategy; import com.u2ware.springfield.support.multipart.DownloadFile; @Springfield( strategy=Strategy.JPA, methodLevelMapping={"*","read.stream","read.download"} ) @Entity public class AttachedFile implements DownloadFile{ @Transient private @Getter @Setter MultipartFile multipartFile; @Id @GeneratedValue private @Getter @Setter Integer id; private @Getter @Setter String contentFile; private @Getter @Setter String contentName; private @Getter @Setter String contentType; private @Getter @Setter long contentSize; }
package com.u2ware.springfield.sample.others.upload; import java.io.IOException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import com.u2ware.springfield.repository.EntityRepository; import com.u2ware.springfield.service.EntityServiceImpl; import com.u2ware.springfield.support.multipart.MultipartFileHandler; import com.u2ware.springfield.validation.RejectableException; @Service public class AttachedFileService extends EntityServiceImpl<AttachedFile, Integer>{ @Autowired private MultipartFileHandler multipartFileHandler; @Autowired @Qualifier("attachedFileRepository") private EntityRepository<AttachedFile, Integer> attachedFileRepository; @Override protected EntityRepository<AttachedFile, Integer> getRepository() { return attachedFileRepository; } @Override @Transactional public AttachedFile create(AttachedFile entity) { try { MultipartFile multipartFile = entity.getMultipartFile(); String contentFile = multipartFileHandler.saveFile(multipartFile); entity.setContentFile(contentFile); entity.setContentName(multipartFile.getOriginalFilename()); entity.setContentType(multipartFile.getContentType()); entity.setContentSize(multipartFile.getSize()); } catch (IOException e) { throw new RejectableException("multipartFile" , "id"); } AttachedFile newEntity = getRepository().create(entity); logger.debug(newEntity.getId()); return newEntity; } @Override @Transactional public AttachedFile delete(AttachedFile entity) { AttachedFile newEntity = getRepository().read(entity); try { multipartFileHandler.deleteFile(newEntity.getContentFile()); } catch (IOException e) { throw new RejectableException("multipartFile" , "id"); } getRepository().delete(newEntity); return entity; } }
@Springfield(strategy=Strategy.JPA) 선언으로 다음 4개의 Bean 이 등록 된다. 자동생성 하려는 Bean(Name)이 이미 존재한다면, @Springfield 는 Bean 을 따로 생성하지 않는다.
bean name | bean type | bean implement |
---|---|---|
"attachedFileController" | EntityController<AttachedFile, AttachedFile> | com.u2ware.springfield.controller. EntityHandler |
"attachedFileValidator" | EntityValidator<AttachedFile, AttachedFile> | com.u2ware.springfield.validation. EntityValidatorImpl |
"attachedFileService" | EntityService<AttachedFile, AttachedFile> | com.u2ware.springfield.sample.others.upload. AttachedFileService |
"attachedFileRepository" | EntityRepository<AttachedFile, Integer> | com.u2ware.springfield.repository.jpa. EntityJpaRepository |
매핑 경로 | HTTP Method | Controller Method 이름 | 예제 Command 객체 | 예제 매핑 경로 |
---|---|---|---|---|
/{topLevelMapping}/ | GET | home() | AttachedFile | /others/upload/ |
/{topLevelMapping} | GET | findForm() | AttachedFile | /others/upload |
/{topLevelMapping} | POST | find() | AttachedFile | /others/upload |
/{topLevelMapping}/{id} | GET | read() | JpaBean | /others/upload/1 |
/others/upload/1.stream | ||||
/others/upload/1.download | ||||
/{topLevelMapping}/new | GET | createForm() | AttachedFile | /others/upload/new |
/{topLevelMapping}/new | POST | create() | AttachedFile | /others/upload/new |
/{topLevelMapping}/{id}/edit | GET | updateForm() | AttachedFile | /others/upload/1/eidt |
/{topLevelMapping}/{id}/edit | PUT | update() | AttachedFile | /others/upload/1/eidt |
/{topLevelMapping}/{id}/edit | DELETE | delete() | AttachedFile | /others/upload/1/eidt |
public interface MultipartFileHandler { public String saveFile(MultipartFile multipartFile) throws IOException; public String saveFile(MultipartFile multipartFile, String saveName) throws IOException; public String saveFile(MultipartFile multipartFile, UploadFile policy) throws IOException; public String saveFile(MultipartFile multipartFile, String saveName , UploadFile policy) throws IOException; public File findFile(String contentFile) throws IOException; public void deleteFile(String contentFile) throws IOException; }
public interface UploadFile { public String getContentFile(MultipartFile multipartFile) ; public String getContentFile(MultipartFile multipartFile, String name) ; }
webmvc.multipart.maxUploadSize=20000000
webmvc.multipart.location=