Загрузите файл в каталог за пределами папки приложения, используя JSP и IBM Websphere в качестве сервера - PullRequest
0 голосов
/ 18 марта 2020

Я делаю простую функцию загрузки файлов, используя 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}" />

Спасибо.

...