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  {
24      private final ServletFileUpload servletFileUpload;
25  
26      public CommonsFileUploadMultipartHandler(long maxFileSize, long maxSize)
27      {
28          servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
29          servletFileUpload.setFileSizeMax(maxFileSize);
30          servletFileUpload.setSizeMax(maxSize);
31      }
32  
33      public FilePart getFilePart(HttpServletRequest request, String field)
34      {
35          return getForm(request).getFilePart(field);
36      }
37  
38      private static class CommonsFileUploadMultipartForm implements
39              MultipartForm
40      {
41          private final Collection<FileItem> fileItems;
42  
43          private CommonsFileUploadMultipartForm(
44                  final Collection<FileItem> fileItems)
45          {
46              this.fileItems = fileItems;
47          }
48  
49          public FilePart getFilePart(String field)
50          {
51              for (FileItem item : fileItems)
52              {
53                  if (item.getFieldName().equals(field))
54                  {
55                      return new CommonsFileUploadFilePart(item);
56                  }
57              }
58              return null;
59          }
60  
61          public Collection<FilePart> getFileParts(String field)
62          {
63              Collection<FilePart> fileParts = new ArrayList<FilePart>();
64              for (FileItem item : fileItems)
65              {
66                  if (item.getFieldName().equals(field))
67                  {
68                      fileParts.add(new CommonsFileUploadFilePart(item));
69  
70                  }
71              }
72              return fileParts;
73          }
74      }
75  
76      public MultipartForm getForm(HttpServletRequest request)
77      {
78          return getForm(new ServletRequestContext(request));
79      }
80  
81      public MultipartForm getForm(RequestContext request)
82      {
83          try
84          {
85              return new CommonsFileUploadMultipartForm(
86                      servletFileUpload.parseRequest(request));
87          } 
88          catch (FileUploadException e)
89          {
90              if (e instanceof FileUploadBase.FileSizeLimitExceededException
91                      || e instanceof FileUploadBase.SizeLimitExceededException)
92              {
93                  throw new FileSizeLimitExceededException(e.getMessage());
94              }
95              throw new RuntimeException(e);
96          }
97      }
98  }