Как загрузить файл в относительный каталог

Я сделал приложение, в котором мы можем загрузить любой файл, который будет сохранен в нашем локальном каталоге. Я хочу изменить его, я хочу добавить раскрывающийся список (с несколькими вариантами, например, этаж, магазин, секция) для отдела. то есть, если мы хотим загрузить файл в папку «Магазин», мы можем выбрать опцию «Магазин», и файл будет загружен в папку «Магазин». То же самое для «Этажа» и «Секции». Мне просто нужен любой пример ссылки для этого. я сделал это в лайфрей.

import org.apache.commons.io.FileUtils;


import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.util.PortalUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;

public class UploadDirectory extends MVCPortlet {

    private final static int ONE_GB = 1073741824;

    private final static String baseDir = "/home/xxcompny/workspace";

    private final static String fileInputName = "fileupload";

    public void upload(ActionRequest request, ActionResponse response)
            throws Exception {

        UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);

        long sizeInBytes = uploadRequest.getSize(fileInputName);

        if (uploadRequest.getSize(fileInputName) == 0) {
            throw new Exception("Received file is 0 bytes!");
        }


        File uploadedFile = uploadRequest.getFile(fileInputName);

        String sourceFileName = uploadRequest.getFileName(fileInputName);



        File folder = new File(baseDir);



        if (folder.getUsableSpace() < ONE_GB) {
            throw new Exception("Out of disk space!");
        }


        File filePath = new File(folder.getAbsolutePath() + File.separator + sourceFileName);


        FileUtils.copyFile(uploadedFile, filePath);
    }

}

JSP здесь

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%>
<portlet:defineObjects />

<portlet:actionURL name="upload" var="uploadFileURL"></portlet:actionURL>

<aui:form action="<%= uploadFileURL %>" enctype="multipart/form-data" method="post">

<select name="folder">
  <option value="store">Store</option>
  <option value="floor">Floor</option>
  <option value="department">Department</option>
</select>

<aui:input type="file" name="fileupload" />
<aui:button name="Save" value="Save" type="submit" />

</aui:form>

Я хочу, чтобы файл загружался в соответствующую папку.


person Akash    schedule 08.06.2015    source источник
comment
Можете ли вы опубликовать код, который вы пробовали, пожалуйста?   -  person Francisco Romero    schedule 08.06.2015
comment
Зачем нужна какая-либо примерная ссылка для этого?... создайте раскрывающийся список, подтвердите выбор и сохраните файл в выбранном каталоге файлов опций.   -  person Rajesh    schedule 08.06.2015
comment
Используйте регистр переключения, чтобы установить baseDir на основе параметра, выбранного пользователем.   -  person Rajesh    schedule 08.06.2015


Ответы (2)


У меня была несколько похожая задача по загрузке файлов в указанные папки, поэтому ниже приведен немного измененный код в соответствии с вашим требованием:

public void upload(ActionRequest request, ActionResponse response)
    throws Exception {

    UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);
    long sizeInBytes = uploadRequest.getSize(fileInputName);

    if (sizeInBytes == 0) {
        throw new Exception("Received file is 0 bytes!");
    }

    File uploadedFile = uploadRequest.getFile(fileInputName);
    String sourceFileName = uploadRequest.getFileName(fileInputName);

    /* selected folder from UI */
    String paramFolder = uploadRequest.getParameter("folder");

    byte[] bytes = FileUtil.getBytes(uploadedFile);

    if (bytes != null && bytes.length > 0) {
        try {
            /* Create folder if doesn't exist */
            File folder = new File(baseDir + File.separator + paramFolder);
            if (!folder.exists()) {
                folder.mkdir();
            }

            /* Write file to specified location */
            File newFile = new File(folder.getAbsolutePath() + File.separator + sourceFileName);            
            FileOutputStream fileOutputStream = new FileOutputStream(newFile);
            fileOutputStream.write(bytes, 0, bytes.length);
            fileOutputStream.close();           
            newFile = null;

        } catch (FileNotFoundException fnf) {
            newFile = null;
            /* log exception */
        } catch (IOException io) {
            newFile = null;
            /* log exception */
        }
    }
}
person Parkash Kumar    schedule 09.06.2015
comment
каково значение baseDir? это ‹tomcat›/webapps или ‹tomcat›/webapps/‹our_webapp›? - person Seeker; 10.09.2015
comment
Для baseDir вы можете использовать themeImagePath из своего поста. - person Parkash Kumar; 10.09.2015

Вы можете использовать приведенный ниже код

String user_selected_option=request.getParameter("userSel")
realPath = getServletContext().getRealPath("/files");
 destinationDir = new File(realPath+"/"+user_selected_option);

// save to destinationDir 
person Gourav malhotra    schedule 08.06.2015
comment
Избегайте ответов, содержащих только код. Пожалуйста, добавьте некоторые пояснения, чтобы завершить ответ. Без объяснений и просто кода этот ответ бесполезен в качестве решения (не говоря уже о том, решает ли он проблему) - person ughai; 08.06.2015
comment
Я хочу передать имя выбранной пользователем папки опций здесь private final static String baseDir = "/home/xxWe/Test/"; Я имею в виду, что если пользователь выбирает опцию floor, значение пола должно быть добавлено после /home/xxWe/Test/_User_Selected_option - person Akash; 08.06.2015