File JSP上载文件失败
我将构建一个简单的jspfile来使用Servlet处理上传文件。在执行时,它显示以下消息File JSP上载文件失败,file,jsp,http,upload,File,Jsp,Http,Upload,我将构建一个简单的jspfile来使用Servlet处理上传文件。在执行时,它显示以下消息 demo Fail: org.apache.catalina.connector.RequestFacade cannot be cast to org.apache.tomcat.util.http.fileupload.RequestContext 您能告诉我如何将HTTP请求转换为RequestContext吗 下面是我的jsp首页代码 <%@ page language="ja
demo Fail: org.apache.catalina.connector.RequestFacade cannot
be cast to org.apache.tomcat.util.http.fileupload.RequestContext
您能告诉我如何将HTTP请求转换为RequestContext吗
下面是我的jsp首页代码
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title Test Upload</title>
</head>
<body>
<form action="uploadFile" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
</form>
</body>
</html>
插入标题测试上载
下面是我的Servlet代码
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.sql.*;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.FileItemFactory;
import org.apache.tomcat.util.http.fileupload.FileUploadException;
import org.apache.tomcat.util.http.fileupload.RequestContext;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class getLogin
*/
public class uploadFile extends HttpServlet {
private static final long serialVersionUID = 17864986468494864L;
// location to store file uploaded
private static final String UPLOAD_DIRECTORY = "upload";
// upload settings
public uploadFile() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//doPost(request, response);
//throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required.");
request.getRequestDispatcher("/WEB-INF/upload.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo");
if (!ServletFileUpload.isMultipartContent(request)) {
// if not, we stop here
PrintWriter writer = response.getWriter();
writer.println("Error: Form must has enctype=multipart/form-data.");
writer.flush();
return;
}
// configures upload settings
DiskFileItemFactory factory = new DiskFileItemFactory();
// sets temporary location to store files
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload = new ServletFileUpload(factory);
// constructs the directory path to store upload file
// this path is relative to application's directory
String uploadPath = getServletContext().getRealPath("")+ File.separator + UPLOAD_DIRECTORY;
// creates the directory if it does not exist
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
try {
// parses the request's content to extract file data
System.out.println(uploadPath);
List<FileItem> formItems = upload.parseRequest((RequestContext)request);
if (formItems != null && formItems.size() > 0) {
// iterates over form's fields
for (FileItem item : formItems) {
// processes only fields that are not form fields
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
String filePath = uploadPath + File.separator + fileName;
File storeFile = new File(filePath);
// C:\tomcat\apache-tomcat-7.0.40\webapps\data\
// saves the file on disk
item.write(storeFile);
request.setAttribute("message","Upload has been done successfully!");
System.out.println("demo Success");
}
}
}
} catch (Exception ex) {
request.setAttribute("message","There was an error: " + ex.getMessage());
System.out.println("demo Fail: " + ex.getMessage() );
}
}
}
import java.io.*;
导入java.net.URL;
导入java.net.URLConnection;
导入java.net.urlcoder;
导入java.sql.*;
导入java.util.Enumeration;
导入java.util.Iterator;
导入java.util.List;
导入javax.servlet.*;
导入javax.servlet.http.*;
导入org.apache.tomcat.util.http.fileupload.FileItem;
导入org.apache.tomcat.util.http.fileupload.FileItemFactory;
导入org.apache.tomcat.util.http.fileupload.FileUploadException;
导入org.apache.tomcat.util.http.fileupload.RequestContext;
导入org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
导入org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
/**
*Servlet实现类getLogin
*/
公共类上载文件扩展HttpServlet{
私有静态最终长serialVersionUID=17864986468494864L;
//存储上载文件的位置
私有静态最终字符串上载\u DIRECTORY=“UPLOAD”;
//上载设置
公共上传文件(){
超级();
//TODO自动生成的构造函数存根
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
//TODO自动生成的方法存根
//doPost(请求、响应);
//抛出新的ServletException(“GET方法与“+getClass().getName()+”:POST方法一起使用。”);
request.getRequestDispatcher(“/WEB-INF/upload.jsp”).forward(请求,响应);
}
/**
*@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
System.out.println(“演示”);
如果(!ServletFileUpload.isMultipartContent(请求)){
//如果不是,我们就到此为止
PrintWriter=response.getWriter();
println(“错误:表单必须有enctype=multipart/formdata.”);
writer.flush();
返回;
}
//配置上载设置
DiskFileItemFactory=新的DiskFileItemFactory();
//设置存储文件的临时位置
setRepository(新文件(System.getProperty(“java.io.tmpdir”));
ServletFileUpload upload=新的ServletFileUpload(工厂);
//构造用于存储上载文件的目录路径
//此路径相对于应用程序的目录
字符串uploadPath=getServletContext().getRealPath(“”+File.separator+UPLOAD\u目录;
//如果目录不存在,则创建该目录
文件上传目录=新文件(上传路径);
如果(!uploadDir.exists()){
uploadDir.mkdir();
}
试一试{
//解析请求的内容以提取文件数据
System.out.println(上传路径);
List formItems=upload.parseRequest((RequestContext)请求);
if(formItems!=null&&formItems.size()>0){
//迭代窗体的字段
用于(文件项:表单项){
//仅处理非表单字段的字段
如果(!item.isFormField()){
字符串文件名=新文件(item.getName()).getName();
字符串filePath=uploadPath+File.separator+fileName;
文件存储文件=新文件(文件路径);
//C:\tomcat\apache-tomcat-7.0.40\webapps\data\
//将文件保存在磁盘上
item.write(存储文件);
setAttribute(“消息”,“上传成功!”);
System.out.println(“演示成功”);
}
}
}
}捕获(例外情况除外){
setAttribute(“消息”,“出现错误:”+ex.getMessage());
System.out.println(“演示失败:+ex.getMessage());
}
}
}
当您从enctype=multipart/Form data的表单中获取参数而不使用标准数据时,在Tomcat 7和Servlet 3.0上尝试此错误
@WebServlet("/yourPattern")
@MultipartConfig
public class UploadFile extends HttpServlet { //...
然后将零件对象用作
Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file">
InputStream filecontent = filePart.getInputStream();
partfilepart=request.getPart(“文件”);//检索
InputStream filecontent=filePart.getInputStream();
而不是
List<FileItem> formItems = upload.parseRequest((RequestContext)request);
if (formItems != null && formItems.size() > 0) {
// iterates over form's fields
for (FileItem item : formItems) {
if (!item.isFormField()) { //...
List formItems=upload.parseRequest((RequestContext)请求);
if(formItems!=null&&formItems.size()>0){
//迭代窗体的字段
用于(文件项:表单项){
如果(!item.isFormField()){/。。。
有关更多信息,请参阅另一篇文章。当您从enctype=multipart/Form data的表单中获取参数而不使用标准时,在Tomcat 7和Servlet 3.0上尝试此错误
@WebServlet("/yourPattern")
@MultipartConfig
public class UploadFile extends HttpServlet { //...
然后将零件对象用作
Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file">
InputStream filecontent = filePart.getInputStream();
partfilepart=request.getPart(“文件”);//检索
InputStream filecontent=filePart.getInputStream();
而不是
List<FileItem> formItems = upload.parseRequest((RequestContext)request);
if (formItems != null && formItems.size() > 0) {
// iterates over form's fields
for (FileItem item : formItems) {
if (!item.isFormField()) { //...
List formItems=upload.parseRequest((RequestContext)请求);
if(formItems!=null&&formItems.size()>0){
//迭代窗体的字段
用于(文件项:表单项){
如果(!item.isFormField()){/。。。
有关更多信息,请参阅其他帖子。这是由于导入不正确造成的。请下载此文件并将其放入WEB-INF/lib文件夹中。如果其他人仍在寻找此文件(如我),请按以下所列正确导入
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
这种情况