View Full Version : سوال: اپلود فایل
tanzadeh7
سه شنبه 07 بهمن 1393, 17:19 عصر
سلام چجوری میشه یک فایل رو با JSP/Servlet اپلود کرد؟
ahmad.mo74
چهارشنبه 08 بهمن 1393, 11:41 صبح
سلام. چندین راه وجود داره مثل استفاده از REST یا Apache Commons File Upload
برای آپلود فایل با استفاده از REST :
RestFileUploader :
package com.controller.rest;
import com.sun.jersey.core.header.FormDataContentDisposit ion;
import com.sun.jersey.multipart.FormDataParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* @author avb
*/
@Path("/file")
public class RestFileUploader {
@POST
@Path("/upload")
@Produces("text/html;charset=UTF-8")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(@FormDataParam("file") InputStream inputStream
, @FormDataParam("file") FormDataContentDisposition contentDisposition) {
String path = "D:\\uploads\\" + contentDisposition.getFileName();
try (FileOutputStream fileOutputStream = new FileOutputStream(path)) {
byte[] bytes = new byte[64 * 1042];
int read;
while ((read = inputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, read);
}
} catch (IOException e) {
return Response.status(Response.Status.INTERNAL_SERVER_ER ROR).build();
}
return Response.status(Response.Status.OK).entity("Successfully Uploaded to : " + path
+ "<script type=\"text/javascript\">setTimeout(function(){window.location = '/index.jsp'},5000)</script>")
.build();
}
}
این قسمت رو هم توی web.xml اضافه کن :
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContai ner</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.controller.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
restUploader.jsp :
<%--
@author avb
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<form action="rest/file/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<br/>
<br/>
<input type="submit" value="Upload"/>
</form>
</body>
</html>
برای آپلود با استفاده از commons file upload :
FileUploader :
package com.controller;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFac tory;
import org.apache.commons.fileupload.servlet.ServletFileU pload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.List;
/**
* @author avb
*/
public class FileUploader extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (!ServletFileUpload.isMultipartContent(req)) {
return;
}
resp.setContentType("text/html;charset=UTF-8");
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> items = upload.parseRequest(req);
for (FileItem item : items) {
String name = item.getName();
if (!item.isFormField() && !name.isEmpty()) {
String path = "D:\\uploads\\" + name;
try (FileOutputStream fileOutputStream = new FileOutputStream(path);
FileChannel fileChannel = fileOutputStream.getChannel()) {
byte[] bytes = item.get();
ByteBuffer buffer = ByteBuffer.allocate(bytes.length);
buffer.clear();
buffer.put(bytes);
buffer.flip();
while (buffer.hasRemaining()) {
fileChannel.write(buffer);
}
resp.getWriter().print("Successfully Uploaded to : " + path
+ "<script type=\"text/javascript\">setTimeout(function(){window.location = '/index.jsp'},5000)</script>");
}
}
}
} catch (Exception e) {
e.printStackTrace();
resp.getWriter().print("Upload was Unsuccessful!"
+ "<script type=\"text/javascript\">setTimeout(function(){window.location = '/index.jsp'},5000)</script>");
}
}
}
توی web.xml :
<servlet>
<servlet-name>uploader</servlet-name>
<servlet-class>com.controller.FileUploader</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uploader</servlet-name>
<url-pattern>/upload.do</url-pattern>
</servlet-mapping>
uploader.jsp :
<%--
@author avb
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<form action="upload.do" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<br/>
<br/>
<input type="submit" value="Upload"/>
</form>
</body>
</html>
فایل pom.xml :
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.fileuplad</groupId>
<artifactId>FileUpload</artifactId>
<version>1.0</version>
<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
</project>
دانلود سورس کامل (http://bit.ly/1K2oFIl)
tanzadeh7
چهارشنبه 08 بهمن 1393, 19:00 عصر
تو استفاده از
Apache Commons File Upload این خطا رو میده
java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtils
org.apache.commons.fileupload.util.Streams.copy(St reams.java:123)
org.apache.commons.fileupload.util.Streams.copy(St reams.java:70)
org.apache.commons.fileupload.MultipartStream.read BodyData(MultipartStream.java:593)
org.apache.commons.fileupload.MultipartStream.disc ardBodyData(MultipartStream.java:617)
org.apache.commons.fileupload.MultipartStream.skip Preamble(MultipartStream.java:634)
org.apache.commons.fileupload.FileUploadBase$FileI temIteratorImpl.findNextItem(FileUploadBase.java:1 023)
org.apache.commons.fileupload.FileUploadBase$FileI temIteratorImpl.<init>(FileUploadBase.java:1003)
org.apache.commons.fileupload.FileUploadBase.getIt emIterator(FileUploadBase.java:310)
org.apache.commons.fileupload.FileUploadBase.parse Request(FileUploadBase.java:334)
org.apache.commons.fileupload.servlet.ServletFileU pload.parseRequest(ServletFileUpload.java:115)
com.controller.FileUploader.doPost(FileUploader.ja va:32)
javax.servlet.http.HttpServlet.service(HttpServlet .java:643)
javax.servlet.http.HttpServlet.service(HttpServlet .java:723)
List<FileItem> items = upload.parseRequest(req);
ahmad.mo74
چهارشنبه 08 بهمن 1393, 19:45 عصر
سلام. بخاطر اینه که jar هارو توی WEB-INF/lib قرار ندادید.
lib رو از اینجا (http://bit.ly/1Cz2Xeo) دانلود کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.