1 package com.atlassian.plugins.rest.common.multipart.fileupload;
2
3 import com.atlassian.plugins.rest.common.multipart.FilePart;
4 import com.atlassian.plugins.rest.common.multipart.MultipartHandler;
5 import com.google.common.base.Preconditions;
6 import org.apache.commons.fileupload.FileItem;
7 import org.apache.commons.fileupload.FileUploadException;
8 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
9 import org.apache.commons.fileupload.servlet.ServletFileUpload;
10
11 import javax.servlet.http.HttpServletRequest;
12 import java.io.IOException;
13 import java.io.InputStream;
14 import java.util.List;
15
16 public class CommonsFileUploadMultipartHandler implements MultipartHandler
17 {
18 private final ServletFileUpload servletFileUpload;
19
20 public CommonsFileUploadMultipartHandler(long maxFileSize)
21 {
22 servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
23 servletFileUpload.setFileSizeMax(maxFileSize);
24 }
25
26 public FilePart getFilePart(HttpServletRequest request, String field)
27 {
28 if (!ServletFileUpload.isMultipartContent(request))
29 {
30 throw new RuntimeException("Not a multipart request");
31 }
32
33 try
34 {
35 for (FileItem item : getFileItems(request))
36 {
37 if (item.getFieldName().equals(field))
38 {
39 return new CommonsFileUploadFilePart(item);
40 }
41 }
42 throw new RuntimeException("balsdjlas");
43 }
44 catch (FileUploadException e)
45 {
46 throw new RuntimeException(e);
47 }
48 }
49
50 @SuppressWarnings("unchecked")
51 private List<FileItem> getFileItems(HttpServletRequest request) throws FileUploadException
52 {
53 return (List<FileItem>) servletFileUpload.parseRequest(request);
54 }
55
56 private static class CommonsFileUploadFilePart implements FilePart
57 {
58 private final FileItem fileItem;
59
60 CommonsFileUploadFilePart(FileItem fileItem)
61 {
62 this.fileItem = Preconditions.checkNotNull(fileItem);
63 }
64
65 public String getName()
66 {
67 return fileItem.getName();
68 }
69
70 public InputStream getInputStream() throws IOException
71 {
72 return fileItem.getInputStream();
73 }
74 }
75 }