View Javadoc

1   package com.atlassian.plugins.rest.common.multipart.fileupload;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   
6   import javax.servlet.http.HttpServletRequest;
7   
8   import com.atlassian.plugins.rest.common.multipart.FilePart;
9   import com.atlassian.plugins.rest.common.multipart.FileSizeLimitExceededException;
10  import com.atlassian.plugins.rest.common.multipart.MultipartForm;
11  import com.atlassian.plugins.rest.common.multipart.MultipartHandler;
12  
13  
14  import org.apache.commons.fileupload.FileItem;
15  import org.apache.commons.fileupload.FileUploadBase;
16  import org.apache.commons.fileupload.FileUploadException;
17  import org.apache.commons.fileupload.RequestContext;
18  import org.apache.commons.fileupload.disk.DiskFileItemFactory;
19  import org.apache.commons.fileupload.servlet.ServletFileUpload;
20  import org.apache.commons.fileupload.servlet.ServletRequestContext;
21  
22  public class CommonsFileUploadMultipartHandler implements MultipartHandler {
23      private final ServletFileUpload servletFileUpload;
24  
25      public CommonsFileUploadMultipartHandler(long maxFileSize, long maxSize) {
26          servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
27          servletFileUpload.setFileSizeMax(maxFileSize);
28          servletFileUpload.setSizeMax(maxSize);
29      }
30  
31      public FilePart getFilePart(HttpServletRequest request, String field) {
32          return getForm(request).getFilePart(field);
33      }
34  
35      private static class CommonsFileUploadMultipartForm implements
36              MultipartForm {
37          private final Collection<FileItem> fileItems;
38  
39          private CommonsFileUploadMultipartForm(
40                  final Collection<FileItem> fileItems) {
41              this.fileItems = fileItems;
42          }
43  
44          public FilePart getFilePart(String field) {
45              for (FileItem item : fileItems) {
46                  if (item.getFieldName().equals(field)) {
47                      return new CommonsFileUploadFilePart(item);
48                  }
49              }
50              return null;
51          }
52  
53          public Collection<FilePart> getFileParts(String field) {
54              Collection<FilePart> fileParts = new ArrayList<FilePart>();
55              for (FileItem item : fileItems) {
56                  if (item.getFieldName().equals(field)) {
57                      fileParts.add(new CommonsFileUploadFilePart(item));
58  
59                  }
60              }
61              return fileParts;
62          }
63      }
64  
65      public MultipartForm getForm(HttpServletRequest request) {
66          return getForm(new ServletRequestContext(request));
67      }
68  
69      public MultipartForm getForm(RequestContext request) {
70          try {
71              return new CommonsFileUploadMultipartForm(
72                      servletFileUpload.parseRequest(request));
73          } catch (FileUploadException e) {
74              if (e instanceof FileUploadBase.FileSizeLimitExceededException
75                      || e instanceof FileUploadBase.SizeLimitExceededException) {
76                  throw new FileSizeLimitExceededException(e.getMessage());
77              }
78              throw new RuntimeException(e);
79          }
80      }
81  }