Author: phuong_vu
Date: 2010-11-09 23:09:36 -0500 (Tue, 09 Nov 2010)
New Revision: 4995
Modified:
exo/portal/branches/3.1.x/component/web/src/main/java/org/exoplatform/upload/UploadService.java
Log:
EXOGTN-3 Support more createUploadResource method that work with Inputstream
Modified:
exo/portal/branches/3.1.x/component/web/src/main/java/org/exoplatform/upload/UploadService.java
===================================================================
---
exo/portal/branches/3.1.x/component/web/src/main/java/org/exoplatform/upload/UploadService.java 2010-11-09
23:14:45 UTC (rev 4994)
+++
exo/portal/branches/3.1.x/component/web/src/main/java/org/exoplatform/upload/UploadService.java 2010-11-10
04:09:36 UTC (rev 4995)
@@ -31,6 +31,8 @@
import org.gatein.common.logging.LoggerFactory;
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
@@ -71,7 +73,7 @@
/**
* Create UploadResource for HttpServletRequest
*
- * @param requestow
+ * @param request
* the webapp's {@link javax.servlet.http.HttpServletRequest}
* @throws FileUploadException
*/
@@ -79,10 +81,15 @@
public void createUploadResource(HttpServletRequest request) throws
FileUploadException
{
String uploadId = request.getParameter("uploadId");
+ createUploadResource(uploadId, request);
+ }
+
+ public void createUploadResource(String uploadId, HttpServletRequest request) throws
FileUploadException
+ {
UploadResource upResource = new UploadResource(uploadId);
upResource.setFileName("");// Avoid NPE in UploadHandler
uploadResources.put(upResource.getUploadId(), upResource);
-
+
putToStackInSession(request.getSession(true), uploadId);
double contentLength = request.getContentLength();
@@ -116,6 +123,53 @@
upResource.setStatus(UploadResource.UPLOADED_STATUS);
}
+ /**
+ * @deprecated use {@link #createUploadResource(String,
javax.servlet.http.HttpServletRequest)} instead
+ *
+ */
+ public void createUploadResource(String uploadId, String encoding, String contentType,
double contentLength,
+ InputStream inputStream) throws Exception
+ {
+ UploadResource upResource = new UploadResource(uploadId);
+ RequestStreamReader reader = new RequestStreamReader(upResource);
+ int limitMB = uploadLimitsMB_.get(uploadId).intValue();
+ int estimatedSizeMB = (int)contentLength / 1024 / 1024;
+ if (limitMB > 0 && estimatedSizeMB > limitMB)
+ { // a limit set to 0 means unlimited
+ upResource.setStatus(UploadResource.FAILED_STATUS);
+ uploadResources.put(uploadId, upResource);
+ log.debug("Upload cancelled because file bigger than size limit : " +
estimatedSizeMB + " MB > "
+ + limitMB + " MB");
+ return;
+ }
+ Map<String, String> headers = reader.parseHeaders(inputStream, encoding);
+
+ String fileName = reader.getFileName(headers);
+ if (fileName == null)
+ fileName = uploadId;
+ fileName = fileName.substring(fileName.lastIndexOf('\\') + 1);
+
+ upResource.setFileName(fileName);
+ upResource.setMimeType(headers.get(RequestStreamReader.CONTENT_TYPE));
+ upResource.setStoreLocation(uploadLocation_ + "/" + uploadId +
"." + fileName);
+ upResource.setEstimatedSize(contentLength);
+ uploadResources.put(upResource.getUploadId(), upResource);
+ File fileStore = new File(upResource.getStoreLocation());
+ if (!fileStore.exists())
+ fileStore.createNewFile();
+ FileOutputStream output = new FileOutputStream(fileStore);
+ reader.readBodyData(inputStream, contentType, output);
+
+ if (upResource.getStatus() == UploadResource.UPLOADING_STATUS)
+ {
+ upResource.setStatus(UploadResource.UPLOADED_STATUS);
+ return;
+ }
+
+ uploadResources.remove(uploadId);
+ fileStore.delete();
+ }
+
@SuppressWarnings("unchecked")
private void putToStackInSession(HttpSession session, String uploadId)
{
Show replies by date