Это просто не сработает. Проблема в том, что я не знаю достаточно, чтобы даже знать, что должно произойти. Я не могу отладить этот код. Я хочу сохранить закачанные файлы во временную папку «temp», а затем переместить их в «апплеты». Пожалуйста помоги? Очевидно, что к сервлету осуществляется доступ, но я не могу найти загруженные файлы ... Заранее спасибо.
Форма (которая создается с помощью скриптлета - я помещаю ее сюда, если это может вызвать проблемы):
<%
out.write("<p>Upload a new game:</p>");
out.write("<form name=\"uploadForm\" action=\"game.jsp\" "
+ "method=\"POST\" enctype=\"multipart/form-data\">"
+ "<input type=\"file\" name=\"uploadSelect\" value=\"\" width=\"20\" />"
+ "<br><input type=\"submit\" value=\"Submit\" name=\"uploadSubmitButton\" "
+ "onclick = \"submitToServlet2('UploadGameServlet');\">"
+ "</form>");
%>
Что вызывает этот javascript:
function submitToServlet2(newAction)
{
document.uploadForm.action = newAction;
}
Что, в свою очередь, переходит к сервлету (код включен полностью, так как некоторые важные элементы могут быть скрыты)
package org.project;
import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
// import servlet stuff
import org.apache.commons.fileupload.*;
public class UploadGameServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
if (ServletFileUpload.isMultipartContent(request))
{
try
{
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List items = upload.parseRequest(request); /* FileItem */
File repositoryPath = new File("\\temp");
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
diskFileItemFactory.setRepository(repositoryPath);
Iterator iter = items.iterator();
while (iter.hasNext())
{
FileItem item = (FileItem) iter.next();
File uploadedFile = new File("\\applets");
item.write(uploadedFile);
}
}
catch (FileUploadException ex)
{
Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex);
}
catch (Exception ex)
{
Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet UploadGameServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet UploadGameServlet at " + request.getContextPath () + "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
Да, сервер выводит заголовок ... Так что я знаю, что он хотя бы доходит до строк вывода. Как я могу отладить код сервлета?
Вы можете попытаться добавить несколько операторов ведения журнала в свой if. Кроме того, регистрируются ли какие-либо исключения?




File repositoryPath = new File("\\temp");
File uploadedFile = new File("\\applets");
Пытаясь получить доступ к этим файлам без какого-либо начального или абсолютного пути, вы пытаетесь выполнить запись в файлы (не каталоги) с именами temp и applets в текущем рабочем каталоге. На сервере приложений текущим рабочим каталогом обычно является папка bin (зависит от того, какой сервер приложений вы используете и т. д.).
Некоторые предложения:
Logger.getLogger(UploadGameServlet.class.getName())!repositoryPath.getAbsolutePath().Это было действительно полезно, спасибо! Теперь он сохраняет файл ... но получает значение кнопки отправки вместо ввода выбора файла. Вы, может быть, знаете, почему?
В исходном коде похоже, что вы записывали каждый элемент списка в один и тот же файл - возможно, каждый раз перезаписывая файл (я не уверен, как работает FileItem.write ()). Вероятно, вы захотите записать в файл только при определенных условиях, проверив FileItem.getFieldName ()
О боже! Оно работает! Наконец-то работает! Большое вам спасибо! Возможно, вы только что сохранили мою семестровую отметку :)
Stackoverflow не существует, чтобы «сохранить семестр», IMO
В то время это помогло мне изучить и улучшить свои навыки. Так что семестровая отметка была счастливым побочным эффектом. Я не вижу в этом проблем.
@mattb: Мэтт использует Apache Commons FileUpload для загрузки файла, но не может загружать файлы xmls, js, css, но отлично работает с pdf, txt, jsp. Не могли бы вы сказать мне, какие расширения файлов поддерживаются "Apache Commons FileUpload"
Вы не можете отладить код сервлета? Вы уверены, что к сервлету осуществляется доступ? Я не знаю, нужно ли вам возвращать правда в функции submitToServlet2, чтобы отправить запрос.