package org.infosec.ismp.agent.winsensor.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.infosec.ismp.agent.winsensor.WinsensorConstant;
import org.infosec.ismp.agent.winsensor.exception.ContentLengthOverLimitException;
/**
* @author Rocky
* @version create time:Oct 26, 2010 10:24:28 AM
*
*/
public class FileUploadUtil {
@SuppressWarnings("unchecked")
public List<FileItem> parseUploadFile(HttpServletRequest req) {
List<FileItem> value = new ArrayList<FileItem>();
if (ServletFileUpload.isMultipartContent(req)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
try {
value = servletFileUpload.parseRequest(req);
} catch (FileUploadException e) {
e.printStackTrace();
}
}
return value;
}
public InputStream getCompleteInputStream(HttpServletRequest req) throws IOException {
int contentLength = req.getContentLength();
InputStream inputStream = null;
InputStream completeInputStream = null;
if (contentLength > WinsensorConstant.UPLOAD_FILE_SIZE_LIMIT ) {
throw new ContentLengthOverLimitException("Request Content length is over limit, size: " + contentLength
+ " limit size is: " + WinsensorConstant.UPLOAD_FILE_SIZE_LIMIT);
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(WinsensorConstant.UPLOAD_FILE_BUFFER_SIZE);
byte[] buffer = new byte[WinsensorConstant.UPLOAD_FILE_BUFFER_SIZE];
int bufferRead;
try {
inputStream = req.getInputStream();
while((bufferRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bufferRead);
}
completeInputStream = new ByteArrayInputStream(outputStream.toByteArray());
} catch (IOException e) {
throw new IOException(e.getMessage());
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
throw new IOException(e.getMessage());
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
throw new IOException(e.getMessage());
}
}
}
return completeInputStream;
}
}