Невозможно получить содержимое файла на сервер во время загрузки - PullRequest
0 голосов
/ 12 января 2011

У меня есть страница JSP, в которой у меня есть поле ввода файла, из которого я просматриваю CSV-файл и затем загружаю его на сервер. Я использую method = "POST" и ENCTYPE = 'multipart / form-data' в форме, в которой присутствует это поле ввода файла.

На стороне сервлета (в сервлете приложения) я использую API API Apache ServletFileUpload для загрузки общего файла. После получения списка FileItem из метода parseRequest (запроса) этого API я не могу получить имя файла и его содержимое с помощью методов getName (), getString () API FileItem.

Необходимо знать, что я делаю неправильно или какие-либо изменения в моем подходе, которые заставят мое приложение работать. Любые указания по этому поводу будут полезны.

Заранее спасибо !!

Также пробовал следующий код в методе doPost основного сервлета приложения: -

`Enumeration enumAttrib = request.getAttributeNames ();

    while(enumAttrib.hasMoreElements()) {
        String attribName = (String)(enumAttrib.nextElement());
        System.out.println("DEBUG:---------AttribName = " + attribName);
        System.out.println("DEBUG:---------AttribValue=" + request.getAttribute(attribName));
    }`

Вывод был напечатан:

DEBUG:---------AttribName = weblogic.servlet.network_channel.port
DEBUG:---------AttribValue=9703

Не знаю, должен ли параметр запроса возвращать только этот или другие атрибуты.

Также пробовал следующий код:

if (ServletFileUpload.isMultipartContent(request)) {

        System.out.println("Inside ApplicationMainServlet request is multipart ");

        // Create a factory for disk-based file items
        FileItemFactory factory = new DiskFileItemFactory();

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        try
        {
            // Parse the request

            List /* FileItem */items = upload.parseReques(request);

            // Process the uploaded items

            Iterator iter = items.iterator();

            while (iter.hasNext())
            {
                FileItem item = (FileItem) iter.next();
                String name = item.getFieldName();

                System.out.println("ApplicationMainServlet name: "+item.getFieldName() + ", val: "+item.getString() );

                if (!item.isFormField())
                {  
                    //Item is a file

                try{

                    InputStream is = item.getInputStream();

                    InputStreamReader ir = new InputStreamReader(is);

                    BufferedReader br = new BufferedReader(ir);

                    System.out.println("br : " + br);

                    String fileContent = "";

                    String strLine;

                    while((strLine = br.readLine()) != null){

                        System.out.println("strLine : " + strLine);

                        if(fileContent != null)
                        {
                            fileContent = fileContent+ strLine + "\n";
                        }
                        else
                        {
                            fileContent = strLine + "\n";
                        }
                    }

                    System.out.println("fileContent : " + fileContent);
                    } catch(Exception e){
                        e.printStackTrace();
                    }

                    System.out.println("ApplicationMainServlet file name " + item.getName()+",size "+item.getSize());                       

                }
            }

1 Ответ

0 голосов
/ 12 января 2011

Вы уверены, что вызывается ваш doProcess метод? Вы поместили какие-либо System.out сообщения в другом месте перед этим блоком кода или в нем?

Кроме того, как вы объявляете форму для загрузки файла? Вам необходимо установить enctype в форме на multipart/form-data:

<form enctype="multipart/form-data" name="uploadForm" action="uploadFormAction">
</form>

Похоже, ваш код в основном корректен на основе документации Apache

if (!item.isFormField()) {
    System.out.println("ApplicationMainServlet: name = " + item.getFieldName() + ", val = " + item.getString() + ", file size = " + item.getSize());
}

Может быть, немного легче читать:

 if (!item.isFormField()) {
     String fieldName = item.getFieldName();
     String fileName = item.getName();
     long sizeInBytes = item.getSize();
     System.out.println("ApplicationMainServlet: name = " + fieldName + ", val = " + fileName + ", file size = " + sizeInBytes);
 }

Сделайте снимок и посмотрите, работает ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...