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.security.MessageDigest;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.servlet.RequestDispatcher;
|
||||
|
@ -25,8 +21,6 @@ import javax.servlet.http.HttpSession;
|
|||
|
||||
import org.apache.commons.fileupload.FileItem;
|
||||
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.LogFactory;
|
||||
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.VitroVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||
import edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest.FileUploadServletRequest;
|
||||
import fedora.client.FedoraClient;
|
||||
import fedora.common.Constants;
|
||||
import fedora.server.management.FedoraAPIM;
|
||||
|
@ -223,53 +218,20 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons
|
|||
}
|
||||
}
|
||||
|
||||
public void doPost(HttpServletRequest req, HttpServletResponse res)
|
||||
public void doPost(HttpServletRequest rawRequest, HttpServletResponse res)
|
||||
throws ServletException,IOException {
|
||||
try{
|
||||
/* the post parameters seem to get consumed by the parsing so we have to
|
||||
* make a copy. */
|
||||
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
|
||||
if (!isMultipart)
|
||||
throw new FdcException("Must POST a multipart encoded request");
|
||||
|
||||
Iterator<FileItem> iter;
|
||||
try { iter = getFileItemIterator(req);
|
||||
} catch (FileUploadException e) {
|
||||
e.printStackTrace();
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FileUploadServletRequest req = null;
|
||||
try {
|
||||
req = FileUploadServletRequest
|
||||
.parseRequest(rawRequest, maxFileSize);
|
||||
} catch (FileUploadException e) {
|
||||
throw new FdcException("Size limit exceeded: " + e.getLocalizedMessage());
|
||||
}
|
||||
if (!req.isMultipart()) {
|
||||
throw new FdcException("Must POST a multipart encoded request");
|
||||
}
|
||||
|
||||
//check if fedora is on line
|
||||
OntModel sessionOntModel = (OntModel)req.getSession().getAttribute("jenaOntModel");
|
||||
synchronized (FedoraDatastreamController.class) {
|
||||
|
@ -296,23 +258,12 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons
|
|||
}
|
||||
|
||||
//get the parameters from the request
|
||||
String pId=null;
|
||||
if( queryParameters.containsKey("pid") && queryParameters.get("pid") != null &&
|
||||
queryParameters.get("pid").size() > 0 ){
|
||||
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);
|
||||
}
|
||||
String pId=req.getParameter("pid");
|
||||
String dsId=req.getParameter("dsid");
|
||||
String fileUri=req.getParameter("fileUri");
|
||||
|
||||
boolean useNewName=false;
|
||||
if( "true".equals(queryParameters.get("useNewName"))){
|
||||
if( "true".equals(req.getParameter("useNewName"))){
|
||||
useNewName = true;
|
||||
}
|
||||
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 " +
|
||||
"enough information to complete your request.(Missing fileUri parameter)");
|
||||
|
||||
FileItem fileRes = null;
|
||||
if( fileStreams.containsKey("fileRes") && fileStreams.get("fileRes").size()>0)
|
||||
fileRes = fileStreams.get("fileRes").get(0);
|
||||
FileItem fileRes = req.getFileItem("fileRes");
|
||||
if( fileRes == null )
|
||||
throw new FdcException("Your form submission did not contain " +
|
||||
"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);
|
||||
rd.forward(req, res);
|
||||
}catch(FdcException ex){
|
||||
req.setAttribute("errors", ex.getMessage());
|
||||
RequestDispatcher rd = req.getRequestDispatcher("/edit/fileUploadError.jsp");
|
||||
rd.forward(req, res);
|
||||
rawRequest.setAttribute("errors", ex.getMessage());
|
||||
RequestDispatcher rd = rawRequest.getRequestDispatcher("/edit/fileUploadError.jsp");
|
||||
rd.forward(rawRequest, res);
|
||||
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 =
|
||||
"<p>The fedora configuartion file will be reloaded if " +
|
||||
"you edit the properties file and check the status.</p>\n";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue