package es.alvsanand.webpage.web.fileupload.common; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Map; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemHeaders; import org.apache.commons.fileupload.FileItemHeadersSupport; import org.apache.commons.fileupload.ParameterParser; public class MemoryFileItem implements FileItemHeadersSupport, FileItem { private static final long serialVersionUID = -4111198009231781933L; public static final String DEFAULT_CHARSET = "ISO-8859-1"; private ByteArrayOutputStream byteArrayOutputStream; private FileItemHeaders headers; private String contentType; private String fieldName; private String fileName; private boolean formField; private int sizeThreshold; public MemoryFileItem(String fieldName, String contentType, boolean formField, String fileName, int sizeThreshold) { this.fieldName = fieldName; this.contentType = contentType; this.formField = formField; this.fileName = fileName; this.sizeThreshold = sizeThreshold; } @Override public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); } @Override public String getContentType() { return contentType; } @Override public String getName() { return getFileName(); } @Override public boolean isInMemory() { return false; } @Override public long getSize() { if (byteArrayOutputStream != null) { return byteArrayOutputStream.size(); } else { return 0; } } @Override public byte[] get() { return byteArrayOutputStream.toByteArray(); } @Override public String getString(String encoding) throws UnsupportedEncodingException { return new String(get(), encoding); } @Override public String getString() { byte[] rawdata = get(); String charset = getCharSet(); if (charset == null) { charset = DEFAULT_CHARSET; } try { return new String(rawdata, charset); } catch (UnsupportedEncodingException e) { return new String(rawdata); } } public String getCharSet() { ParameterParser parser = new ParameterParser(); parser.setLowerCaseNames(true); Map params = parser.parse(getContentType(), ';'); return (String) params.get("charset"); } @Override public void write(File file) throws Exception { } @Override public void delete() { } @Override public String getFieldName() { return fieldName; } @Override public void setFieldName(String name) { this.fieldName = name; } @Override public boolean isFormField() { return formField; } @Override public void setFormField(boolean state) { formField = state; } @Override public OutputStream getOutputStream() throws IOException { if(byteArrayOutputStream==null){ byteArrayOutputStream = new ByteArrayOutputStream(sizeThreshold); } return byteArrayOutputStream; } @Override public FileItemHeaders getHeaders() { return headers; } @Override public void setHeaders(FileItemHeaders headers) { this.headers = headers; } public void setContentType(String contentType) { this.contentType = contentType; } public int getSizeThreshold() { return sizeThreshold; } public void setSizeThreshold(int sizeThreshold) { this.sizeThreshold = sizeThreshold; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } @Override public String toString() { return "MemoryFileItem [headers=" + headers + ", contentType=" + contentType + ", fieldName=" + fieldName + ", fileName=" + fileName + ", formField=" + formField + ", sizeThreshold=" + sizeThreshold + "]"; } }