Я делаю простую функцию загрузки файлов, используя JSP сервлеты и IBM Websphere v9 в качестве моего сервера. Я разработал файл html, используя простую форму POST "multipart / form-data", которая отправляет файл, и мой файл jsp поместит этот загруженный файл в путь к нужному каталогу. На моей локальной рабочей станции я смог загрузить файл на диск C, и он работает. Я использую файл jar "org. apache .commons.fileupload".
Теперь я загружаю свое приложение, используя консоль IBM Websphere внешней сетевой среды. В моем приложении у меня есть файл xml с именем "ibm-web-ext. xml" в моей папке WEB-INF. Я добавил атрибут <file-serving-attribute name="extendedDocumentRoot" value="${DATAFILES}" />
в ibm-web-ext. xml, чтобы получить доступ к этому каталогу вне папки проекта в среде хоста. Я проверил вручную, добавив файл в этот каталог, используя putty с помощью команд linux, и загрузил этот файл, используя URL-адрес ниже в браузере. Это работает, что я смог получить этот файл с помощью браузера. Пример (не реальный URL): "https://HOSTNAME: 9443 / myapp / uploadfiles / test.csv "
Теперь мой вопрос. Я пытаюсь загрузить файл и поместить его в это место. "https://HOSTNAME: 9443 / MyApp / uploadfiles / ". Возможно ли это и как я могу это сделать? Мне удалось загрузить файл в папке проекта, но я хочу загрузить файл за пределами папки приложения. Я не слишком знаком с сервером IBM или с тем, как работает IBM xml, но мне нужна помощь в этом.
Вот мой пример моего JSP файла, где я получил свой URL-путь из Интернета. xml файл.
String name = request.getParameter("full_name");
File file;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
ServletContext context = pageContext.getServletContext();
String uploadFolder = context.getInitParameter("file-upload"); //I GOT THIS FROM THE WEB.XML file to get the value of the url path
String contentType = request.getContentType();
if ( (contentType.indexOf("multipart/form-data") >= 0) )
{
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(maxMemSize);
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxFileSize);
try
{
List fileItems = upload.parseRequest(request);
String uniqueID = UUID.randomUUID().toString();
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>JSP File upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField() )
{
// Get the uploaded file parameters
String fileName = fi.getName();
long sizeInBytes = fi.getSize();
System.out.println("file path is: " + uploadFolder);
// Write the file
if( fileName.lastIndexOf("\\") >= 0 )
{
System.out.println("file path is: " + uploadFolder);
file = new File( uploadFolder + File.separator + "ID" + uniqueID + "_" + fileName.substring( fileName.lastIndexOf("\\"));
}
else
{
System.out.println("file path is: " + uploadFolder);
file = new File( uploadFolder + File.separator + "ID" + uniqueID + "_" + fileName.substring(fileName.lastIndexOf("\\") +1));
}
fi.write( file ) ;
out.println("Uploaded Filename: " + uploadFolder + File.separator + fileName + "<br>");
}
else
{
String getFieldText = fi.getString();
System.out.println("getfieldname is: " + getFieldText);
}
}
out.println("</body>");
out.println("</html>");
}
catch(Exception e)
{
out.println("Error: " + e);
out.println("upload file test: " + uploadFolder);
System.out.println(e);
}
}
Мой код:
String uploadFolder = context.getInitParameter("file-upload");
Вместо использования context.getInitParameter (...) для получения доступа к сети. xml, будет ли работать, если я возьму значение параметра из файла ibm-web-ext. xml и воспользуюсь этим окружением переменная, чтобы быть моим путем к файлу? Как я могу это сделать или как я могу загрузить файл в каталог за пределами папки приложения? Я пробовал исследовательские сайты, но не повезло. Я также добавил эти атрибуты в ibm-web-ext. xml, но не уверен, как это работает и как его получить в моем файле jsp.
<jsp-attribute name="evalQuotedAndEscapedExpression" value="true" />
<jsp-attribute name="extendedDocumentRoot" value="${DATAFILES}" />
Спасибо.