如何在servlet得到jsp上传的文件的文件名

 我来答
tb...1@163.com
推荐于2017-11-23 · TA获得超过282个赞
知道小有建树答主
回答量:323
采纳率:0%
帮助的人:186万
展开全部
可以使用commons-fileupload组件实现文件上传,步骤如下:

1、添加jar包:commons-fileupload-x.x.x.jar和commons-io-2.4.jar
2、编写或修改form表单
1) 提交方式必须是post
2) 为表单增加属性enctype="multipart/form-data"
3) 为文件上传单独提供servlet,因为增加enctype属性后,无法使用常规的请求对象来获取提交的数据
3、使用Commons-FileUpload组件实现文件的上传
1) 确定本次请求是否是文件上传请求
boolean flag=ServletFileUpload.isMultipartContent(request);
2) 创建文件上传的工厂对象
FileItemFactory factory=new DiskFileItemFactory();
3) 创建ServletFileUpload对象,并将工厂对象作为参数传入
ServletFileUpload upload=new ServletFileUpload(factory);
4) 使用上传对象从请求对象中解析出提交的所有表单元素
List<FileItem> lstForms=upload.parseRequest(request);
5) 遍历表单元素集合,实现取出表单元素和上传文件
//遍历所有表单元素
for (FileItem fileItem : lstForms) {
//判断每一个表单元素是否是普通表单
if(fileItem.isFormField()){
System.out.println(fileItem.getString("UTF-8"));
}else{
//上传前准备工作
//a、上传后的路径this.getServletContext().getRealPath("/")会出去当前项目在 部署的服务器上的绝对路径

String path=this.getServletContext().getRealPath("/")+"files/";
//b、找出要上传的文件的名字
String fileName=fileItem.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
//c、上传
fileItem.write(new File(path+fileName));
out.println("<h2>"+fileName+"上传成功!</h2>");
958669007
2017-10-30 · 超过32用户采纳过TA的回答
知道答主
回答量:176
采纳率:66%
帮助的人:56.7万
展开全部
upload.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file"><br>
    <input type="submit" name="bt" value="上传">
    </form>
  </body>
</html>

Servlet.java页面

package com.gk.upload;

import java.util.List;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
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.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet(value="/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");//更改文件编码格式
request.setCharacterEncoding("utf-8");//更改文件编码格式
PrintWriter out = response.getWriter();

try {

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> IstForms = upload.parseRequest(request) ;//在Myeclipse中需将导入的包更改为import java.util.List;,默认导入的是import java.awt.List;
for(FileItem fileItem:IstForms){
if(fileItem.isFormField()){
System.out.println(fileItem.getString("utf-8"));
}else{
String path = request.getServletContext().getRealPath("/upload");
String fileName = fileItem.getName();
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
fileItem.write(new File(path+"/"+fileName));//不添加“/”文件上传会失败
out.write(fileName+"文件上传成功");
}
}
} catch (Exception e) {
// TODO: handle exception
}

}


}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhang747572367
2016-11-30 · TA获得超过162个赞
知道小有建树答主
回答量:350
采纳率:75%
帮助的人:112万
展开全部
jsp上传过来的二进制文件封装成File对象,然后File就有获取文件名的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式