NIHVIVO-160 Rewrite FedoraDatastreamController to use the FileUploadServletRequest.
This commit is contained in:
parent
77f9fd2d30
commit
f584aebbd5
1 changed files with 22 additions and 86 deletions
|
@ -9,11 +9,7 @@ import java.io.InputStream;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import javax.servlet.RequestDispatcher;
|
import javax.servlet.RequestDispatcher;
|
||||||
|
@ -25,8 +21,6 @@ import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
import org.apache.commons.fileupload.FileItem;
|
import org.apache.commons.fileupload.FileItem;
|
||||||
import org.apache.commons.fileupload.FileUploadException;
|
import org.apache.commons.fileupload.FileUploadException;
|
||||||
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|
||||||
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
@ -51,6 +45,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest.FileUploadServletRequest;
|
||||||
import fedora.client.FedoraClient;
|
import fedora.client.FedoraClient;
|
||||||
import fedora.common.Constants;
|
import fedora.common.Constants;
|
||||||
import fedora.server.management.FedoraAPIM;
|
import fedora.server.management.FedoraAPIM;
|
||||||
|
@ -223,51 +218,18 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doPost(HttpServletRequest req, HttpServletResponse res)
|
public void doPost(HttpServletRequest rawRequest, HttpServletResponse res)
|
||||||
throws ServletException,IOException {
|
throws ServletException,IOException {
|
||||||
try{
|
try{
|
||||||
/* the post parameters seem to get consumed by the parsing so we have to
|
FileUploadServletRequest req = null;
|
||||||
* make a copy. */
|
try {
|
||||||
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
|
req = FileUploadServletRequest
|
||||||
if (!isMultipart)
|
.parseRequest(rawRequest, maxFileSize);
|
||||||
throw new FdcException("Must POST a multipart encoded request");
|
|
||||||
|
|
||||||
Iterator<FileItem> iter;
|
|
||||||
try { iter = getFileItemIterator(req);
|
|
||||||
} catch (FileUploadException e) {
|
} catch (FileUploadException e) {
|
||||||
e.printStackTrace();
|
throw new FdcException("Size limit exceeded: " + e.getLocalizedMessage());
|
||||||
throw new FdcException("There was an error processing the " +
|
|
||||||
"parameters of your request.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// get files or parameter values
|
|
||||||
Map<String, List<String>> queryParameters =new HashMap<String, List<String>>();
|
|
||||||
Map<String, List<FileItem>> fileStreams = new HashMap<String, List<FileItem>>();
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
FileItem item = (FileItem) iter.next();
|
|
||||||
String name = item.getFieldName();
|
|
||||||
if (item.isFormField()) {
|
|
||||||
if (queryParameters.containsKey(name)) {
|
|
||||||
String value = item.getString("UTF-8");
|
|
||||||
queryParameters.get(name).add(value);
|
|
||||||
} else {
|
|
||||||
List<String> valueList = new ArrayList<String>(1);
|
|
||||||
String value = item.getString("UTF-8");
|
|
||||||
valueList.add(value);
|
|
||||||
queryParameters.put(name, valueList);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (fileStreams.containsKey(name)) {
|
|
||||||
fileStreams.get(name).add(item);
|
|
||||||
log.debug("File in multipart content request: field "
|
|
||||||
+ name + " with file name " + item.getName()
|
|
||||||
+ " detected.");
|
|
||||||
} else {
|
|
||||||
List<FileItem> itemList = new ArrayList<FileItem>();
|
|
||||||
itemList.add(item);
|
|
||||||
fileStreams.put(name, itemList);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (!req.isMultipart()) {
|
||||||
|
throw new FdcException("Must POST a multipart encoded request");
|
||||||
}
|
}
|
||||||
|
|
||||||
//check if fedora is on line
|
//check if fedora is on line
|
||||||
|
@ -296,23 +258,12 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons
|
||||||
}
|
}
|
||||||
|
|
||||||
//get the parameters from the request
|
//get the parameters from the request
|
||||||
String pId=null;
|
String pId=req.getParameter("pid");
|
||||||
if( queryParameters.containsKey("pid") && queryParameters.get("pid") != null &&
|
String dsId=req.getParameter("dsid");
|
||||||
queryParameters.get("pid").size() > 0 ){
|
String fileUri=req.getParameter("fileUri");
|
||||||
pId = queryParameters.get("pid").get(0);
|
|
||||||
}
|
|
||||||
String dsId=null;
|
|
||||||
if( queryParameters.containsKey("dsid") && queryParameters.get("dsid") != null &&
|
|
||||||
queryParameters.get("dsid").size() > 0 ){
|
|
||||||
dsId = queryParameters.get("dsid").get(0);
|
|
||||||
}
|
|
||||||
String fileUri=null;
|
|
||||||
if( queryParameters.containsKey("fileUri") && queryParameters.get("fileUri") != null &&
|
|
||||||
queryParameters.get("fileUri").size() > 0 ){
|
|
||||||
fileUri = queryParameters.get("fileUri").get(0);
|
|
||||||
}
|
|
||||||
boolean useNewName=false;
|
boolean useNewName=false;
|
||||||
if( "true".equals(queryParameters.get("useNewName"))){
|
if( "true".equals(req.getParameter("useNewName"))){
|
||||||
useNewName = true;
|
useNewName = true;
|
||||||
}
|
}
|
||||||
if( pId == null || pId.length() == 0 )
|
if( pId == null || pId.length() == 0 )
|
||||||
|
@ -325,9 +276,7 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons
|
||||||
throw new FdcException("Your form submission did not contain " +
|
throw new FdcException("Your form submission did not contain " +
|
||||||
"enough information to complete your request.(Missing fileUri parameter)");
|
"enough information to complete your request.(Missing fileUri parameter)");
|
||||||
|
|
||||||
FileItem fileRes = null;
|
FileItem fileRes = req.getFileItem("fileRes");
|
||||||
if( fileStreams.containsKey("fileRes") && fileStreams.get("fileRes").size()>0)
|
|
||||||
fileRes = fileStreams.get("fileRes").get(0);
|
|
||||||
if( fileRes == null )
|
if( fileRes == null )
|
||||||
throw new FdcException("Your form submission did not contain " +
|
throw new FdcException("Your form submission did not contain " +
|
||||||
"enough information to complete your request.(Missing fileRes)");
|
"enough information to complete your request.(Missing fileRes)");
|
||||||
|
@ -517,9 +466,9 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons
|
||||||
RequestDispatcher rd = req.getRequestDispatcher(Controllers.BASIC_JSP);
|
RequestDispatcher rd = req.getRequestDispatcher(Controllers.BASIC_JSP);
|
||||||
rd.forward(req, res);
|
rd.forward(req, res);
|
||||||
}catch(FdcException ex){
|
}catch(FdcException ex){
|
||||||
req.setAttribute("errors", ex.getMessage());
|
rawRequest.setAttribute("errors", ex.getMessage());
|
||||||
RequestDispatcher rd = req.getRequestDispatcher("/edit/fileUploadError.jsp");
|
RequestDispatcher rd = rawRequest.getRequestDispatcher("/edit/fileUploadError.jsp");
|
||||||
rd.forward(req, res);
|
rd.forward(rawRequest, res);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -729,19 +678,6 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private Iterator<FileItem> getFileItemIterator(HttpServletRequest request)
|
|
||||||
throws FileUploadException {
|
|
||||||
//Create a factory for disk-based file items
|
|
||||||
DiskFileItemFactory factory = new DiskFileItemFactory();
|
|
||||||
factory.setSizeThreshold(maxFileSize);
|
|
||||||
factory.setRepository(new File(baseDirectoryForFiles));
|
|
||||||
|
|
||||||
// Create a new file upload handler
|
|
||||||
ServletFileUpload upload = new ServletFileUpload(factory);
|
|
||||||
upload.setSizeMax(maxFileSize);
|
|
||||||
return upload.parseRequest(request).iterator();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String RELOAD_MSG =
|
private static final String RELOAD_MSG =
|
||||||
"<p>The fedora configuartion file will be reloaded if " +
|
"<p>The fedora configuartion file will be reloaded if " +
|
||||||
"you edit the properties file and check the status.</p>\n";
|
"you edit the properties file and check the status.</p>\n";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue