2010-05-13 2 views

ответ

6

Для начала, чтобы выбрать файл для загрузки с помощью JSP вы должны по крайней мере HTML <input type="file"> элемента который отобразит поле просмотра файла. Как указано в HTML forms spec, вам необходимо установить способ запроса POST, а кодировку запроса - multipart/form-data в родительском элементе <form>.

<form action="upload" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file"> 
    <input type="submit"> 
</form> 

Поскольку вышеупомянутый запрос кодирования по умолчанию не поддерживается в Servlet API, прежде чем Servlet 3.0 (который я не думаю, что вы используете, потому что EJB 3.0 является частью Java EE 5.0, которая, в свою очередь, содержит Servlet 2.5 только), вы не увидите ничего на карте параметров запроса. request.getParameter("file") вернется null.

Чтобы загрузить загруженный файл и другие параметры запроса в сервлет, вам необходимо самостоятельно разобрать InputStream из HttpServletRequest. К счастью, обычно используется API, который может взять утомительную работу из ваших рук: Apache Commons FileUpload.

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 
for (FileItem item : items) { 
    if (!item.isFormField()) { 
     // <input type="file"> 
     System.out.println("Field name: " + item.getFieldName()); 
     System.out.println("File name: " + item.getName()); 
     System.out.println("File size: " + item.getSize()); 
     System.out.println("File type: " + item.getContentType()); 
    } else { 
     // <input type="text|submit|hidden|password|button">, <select>, <textarea>, <button> 
     System.out.println("Field name: " + item.getFieldName()); 
     System.out.println("Field value: " + item.getString()); 
    }    
} 

В основном вам просто нужно, чтобы получить InputStream от FileItem объекта и записать его на любой OutputStream на свой вкус, используя обычный Java IO путь.

InputStream content = item.getInputStream(); 

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

item.write(new File("/uploads/filename.ext")); 

На их сайте вы можете найти много примеров кода и важных советов & трюков в секциях User Guide и Frequently Asked Questions. Прочтите их внимательно.

+0

Большое спасибо за ваши предложения! Я изучу Commons Fileload и попытаюсь реализовать в своем приложении, то я вернусь. Позаботьтесь! George – George

+0

+1. Я бы добавил, что вам нужно добавить '@SuppressWarnings (« unchecked »)', чтобы позаботиться о первой строке кода, поскольку 'parseRequest()' просто возвращает 'List' –

+0

, я внедрил ваш код, но он выбрасывает исключение FileNotFound – Roshan

Смежные вопросы