Как загрузить файлы на серверной папке с помощью jsp
Я пытаюсь загрузить некоторые изображения в папку, которая находится на моем сервере, используя servlet / jsp.
Ниже мой код, который работает на моей локальной машине:
import java.io.*; import java.util.*; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.output.*; public class UploadServlet extends HttpServlet { private boolean isMultipart; private String filePath; private int maxFileSize = 1000 * 1024; private int maxMemSize = 1000 * 1024; private File file ; public void init( ){ // Get the file location where it would be stored. filePath = getServletContext().getInitParameter("file-upload"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { // Check that we have a file upload request isMultipart = ServletFileUpload.isMultipartContent(request); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); if( !isMultipart ){ out.println(""); out.println(""); out.println("Servlet upload "); out.println(""); out.println(""); out.println("No file uploaded
- Внедрение простого сервлета загрузки файлов
- Ant, загрузка набора файлов с удаленной машины
- Selenium: загрузите файл в Internet Explorer в указанную папку без прямой ссылки, без форм Windows, без AutoIt или Robot
- Загрузите файл с помощью JSF?
- wget для загрузки файла и сохранения в виде другого имени файла
"); out.println(""); out.println(""); return; } DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File(" C:/Users/puneet verma/Downloads/")); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax( maxFileSize ); try{ // Parse the request to get file items. List fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator i = fileItems.iterator(); out.println(""); out.println(""); out.println("Servlet upload "); out.println(""); out.println(""); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // Get the uploaded file parameters String fieldName = fi.getFieldName(); String fileName = fi.getName(); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); // Write the file if( fileName.lastIndexOf("\\") >= 0 ){ file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ; }else{ file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ; } fi.write( file ) ; out.println("Uploaded Filename: " + fileName + "
"); } } out.println(""); out.println(""); }catch(Exception ex) { System.out.println(ex); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required."); } }
Теперь мой jsp-код, где я загружаю файл:
File Uploading Form File Upload:
Select a file to upload:
В файле My web.xml я включил путь следующим образом:
Location to store uploaded file file-upload C:\Users\puneet verma\Downloads\
Я использовал свой путь к серверу http://grand-shopping.com/ , но он вообще не работает.
Библиотеки, которые я использую:
- Обще-FileUpload-1.3.jar
- Обще-ю-2.2.jar
Может ли кто-нибудь предложить мне, как именно мне нужно определить свой путь к серверу, чтобы успешно загружать изображения.
- Как отправить байт в формате pdf в браузер в java-приложении?
- Загрузите несколько файлов async и дождитесь их завершения до выполнения остальной части кода.
- Установите тайм-аут для webClient.DownloadFile ()
- Как мне ZIP-файл на C #, без использования сторонних API-интерфейсов?
- Загрузите и установите версию Xcode 10 без учетной записи разработчика Premium
- IE: невозможно загрузить * из *. Не удалось открыть этот интернет-сайт. Запрошенный сайт либо недоступен, либо не может быть найден
- Android Webview: невозможно вызвать функцию definVisibility () - никогда не видел подключения для pid
- CFBundleVersion в ошибке загрузки Info.plist
Ниже код работает на моем живом сервере, а также в моем собственном Lapy.
Заметка:
Создайте папку данных в WebContent и поместите в любое изображение или любой файл (jsp или html-файл).
Добавить файлы jar
Викисклад коллекция-3.1.jar
Обще-FileUpload-1.2.2.jar
Обще-ю-2.1.jar
Обще-каротаж 1.0.4.jar
upload.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> File Upload
UploadServlet.java
package com.servlet; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class UploadServlet */ public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String DATA_DIRECTORY = "data"; private static final int MAX_MEMORY_SIZE = 1024 * 1024 * 2; private static final int MAX_REQUEST_SIZE = 1024 * 1024; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Check that we have a file upload request boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (!isMultipart) { return; } // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Sets the size threshold beyond which files are written directly to // disk. factory.setSizeThreshold(MAX_MEMORY_SIZE); // Sets the directory used to temporarily store files that are larger // than the configured size threshold. We use temporary directory for // java factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); // constructs the folder where uploaded file will be stored String uploadFolder = getServletContext().getRealPath("") + File.separator + DATA_DIRECTORY; // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(MAX_REQUEST_SIZE); try { // Parse the request List items = upload.parseRequest(request); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String filePath = uploadFolder + File.separator + fileName; File uploadedFile = new File(filePath); System.out.println(filePath); // saves the file to upload directory item.write(uploadedFile); } } // displays done.jsp page after upload finished getServletContext().getRequestDispatcher("/done.jsp").forward( request, response); } catch (FileUploadException ex) { throw new ServletException(ex); } catch (Exception ex) { throw new ServletException(ex); } } }
web.xml
UploadServlet UploadServlet com.servlet.UploadServlet UploadServlet /UploadServlet
done.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> Upload Done Your file has been uploaded!
public class FileUploadExample extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { // 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 items = upload.parseRequest(request); Iterator iterator = items.iterator(); while (iterator.hasNext()) { FileItem item = (FileItem) iterator.next(); if (!item.isFormField()) { String fileName = item.getName(); String root = getServletContext().getRealPath("/"); File path = new File(root + "/uploads"); if (!path.exists()) { boolean status = path.mkdirs(); } File uploadedFile = new File(path + "/" + fileName); System.out.println(uploadedFile.getAbsolutePath()); item.write(uploadedFile); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } }
Вы не можете загрузить так.
http://grand-shopping.com/<"some folder">
Вам нужен физический путь точно так же, как в вашем местном
C:/Users/puneet verma/Downloads/
Что вы можете сделать, так это создать локальный путь, на котором работает ваш сервер. Следовательно, вы можете хранить и извлекать файл. Если вы купили какой-либо домен с любых веб-сайтов, будет существовать путь для загрузки файлов. Вы создаете эту переменную как статическую константу и используете ее на основе сервера, на котором вы работаете (локальный / веб-сайт).
Вы можете использовать только абсолютный путь http://grand-shopping.com/ <"некоторая папка"> не является абсолютным путем.
Либо вы можете использовать путь внутри приложения, который является vurneable, либо вы можете использовать определенный для сервера путь, как в
windows -> C:/Users/puneet verma/Downloads/ linux -> /opt/Downloads/
Я нашел подобную проблему и нашел решение, и у меня есть блог о том, как загрузить файл с помощью JSP. В этом примере я использовал абсолютный путь. Обратите внимание: если вы хотите перейти на другое местоположение на основе URL-адреса, вы можете поместить ESB, например, WSO2 ESB