jspservlet文件上传
上传:
需要导入两个包:commons-fileupload-1.2.1.jar,commons-io-1.4.jar
import java.io.File;
import java.io.IOException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* 上传附件
* @author new
*
*/
public class UploadAnnexServlet extends HttpServlet {
private static String path = "";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/*
* post处理
* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
path = this.getServletContext().getRealPath("/upload");
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload up = new ServletFileUpload(factory);
List<FileItem> ls = up.parseRequest(request);
for (FileItem fileItem : ls) {
if (fileItem.isFormField()) {
String FieldName = fileItem.getFieldName();
//getName()返回的是文件名字 普通域没有文件 返回NULL
// String Name = fileItem.getName();
String Content = fileItem.getString("gbk");
request.setAttribute(FieldName, Content);
} else {
String nm = fileItem.getName().substring(
fileItem.getName().lastIndexOf("\\") + 1);
File mkr = new File(path, nm);
if (mkr.createNewFile()) {
fileItem.write(mkr);//非常方便的方法
}
request.setAttribute("result", "上传文件成功!");
}
}
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("result", "上传失败,请查找原因,重新再试!");
}
request.getRequestDispatcher("/pages/admin/annex-manager.jsp").forward(
request, response);
}
}
下载(i/o流)无需导包:
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 下载文件
* @author
*
*/
public class DownloadFilesServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 8594448765428224944L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/*
* 处理请求
* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("fileName");
System.out.print("dddddddddd:" + name);
// web绝对路径
String path = request.getSession().getServletContext().getRealPath("/");
String savePath = path + "upload";
// 设置为下载application/x-download
response.setContentType("application/x-download");
// 即将下载的文件在服务器上的绝对路径
String filenamedownload = savePath + "/" + name;
// 下载文件时显示的文件保存名称
String filenamedisplay = name;
// 中文编码转换
filenamedisplay = URLEncoder.encode(filenamedisplay, "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename="
+ filenamedisplay);
try {
java.io.OutputStream os = response.getOutputStream();
java.io.FileInputStream fis = new java.io.FileInputStream(
filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while ((i = fis.read(b)) > 0) {
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();
} catch (Exception e) {
}
}
}
㈡ jsp+servlet 上传图片并显示出来
其实你这个挡也显示图片其实很简单的,
你的需求无非是两个
1.servlet上传文件(图片)
2.点击 浏览 图标,然后选择图片文件,然后就可以在页面中的某个地方看到图片
是这两个需求么?
首先说第二个吧。
你上传图片之后,就马上触发js函数,内容为
var PicPath = document.getElementById("yourfile").value;
document.getElementById("yourDiv").innerHTML="<IMG src="+PicPath+"/>";
OK了
第一个嘛就无所谓说了,不过我还是贴一个代码吧,
public void upLoadFile(HttpServletRequest request, HttpServletResponse response) {
PrintWriter out = null;
response.setCharacterEncoding("UTF-8");
//实例化文件工厂
FileItemFactory factory = new DiskFileItemFactory();
//配置上传组件ServletFileUpload
ServletFileUpload upload = new ServletFileUpload(factory);
try {
out = response.getWriter();
//从request得到所有上传域的列表
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
//isFormField判断一个item类对象封装的是一个普通的表单字段还是文件表单字段。
// 如果item是文件域,则做出如下处理:
if (!item.isFormField()) {
//上传文件域的Name
String fileName = item.getName();
//截取扩展名
int idx = fileName.lastIndexOf(".");
String extension = fileName.substring(idx);
//获取文件名
String name = new Date().getTime() + extension;
//得到文件夹的物理路径
String path = this.getServletContext().getRealPath("\\upload");
//创建一个File
File file = new File(path + "\\" + name);
FileOutputStream o = new FileOutputStream(file);
InputStream in = item.getInputStream();
try {
LoadProcessServlet.process = 0;
LoadProcessServlet.total = 100;
LoadProcessServlet.isEnd = false;
LoadProcessServlet.total = item.getSize();
byte b[] = new byte[1024];
int n;
while ((n = in.read(b)) != -1) {
LoadProcessServlet.process+=n;
o.write(b, 0, n);
System.out.println("实际:"+LoadProcessServlet.process);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
LoadProcessServlet.isEnd = true;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
㈢ 如何在servlet得到jsp上传的文件的文件名
可以使用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>");
㈣ java jsp 怎么上传图片到servlet
jsp:
<form action="up.do" method="post" enctype="multipart/form-data" id="upform"> 文件:<input type="file" name="file" id="file"/> <input type="button" id="btn" value="上传"/> </form>
SERVLET:
FileItemFactory fileItemFactory = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory); //设置 中文 编码集 fileUpload.setHeaderEncoding("UTF-8"); try { List<FileItem> fileItems= fileUpload.parseRequest(request); for (FileItem fi : fileItems) { if(fi.isFormField()){ } } } for (FileItem fileItem : fileItems) { if(fileItem.isFormField()){ }else{ //文件名 String filename = fileItem.getName(); //文件名处理 if(filename.indexOf('\\') != -1){ filename = filename.substring(filename.lastIndexOf('\\')+1); } System.out.println(filename); if(filename == null || filename.equals("")){ request.setAttribute("msg", "没有指定上传文件"); request.getRequestDispatcher("index.jsp").forward(request, response); //验证码错误 就退出 return; } //path 生成文件夹 String fpath = "F:\\\\中软高科\\\\小组\\\\5组日报"+UpFileUtil.getMonthadnDate(); File file = new File(fpath); if(!file.exists()){ file.mkdir(); } //文件全路径 fpath = fpath+"\\\\"+filename;// System.out.println(filename+"--->"+fpath+"--->"+UpFileUtil.getTime()); //写出文件到 服务器磁盘 InputStream in = fileItem.getInputStream();//request.getInputStream(); OutputStream out = new FileOutputStream(fpath); byte[] buff = new byte[1024*10]; while(in.read(buff) != -1){ out.write(buff); } out.flush(); out.close(); in.close(); //保存文件信息到数据库 new UpFileDao().updFile("{call file_add(?,?,?)}",new String[]{filename,fpath,UpFileUtil.getTime()}); filename = null; fpath = null; file = null; request.setAttribute("msg", "上传成功"); request.getRequestDispatcher("index.jsp").forward(request, response); } } } catch (Exception e) { e.printStackTrace(); }
㈤ 在servlet中怎样上传文件
//新建一个Smartupload对象
SmartUpload
su=new
SmartUpload();
//上传初始化
su.initialize(pageContext);
//设定上传限度
//1.限定每个上传文件的最大长度
//su.setMaxFileSize(100000);
//2.限制总上传数据的长度。
//su.setTotalMaxFileSize(20000);
//3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
//su.setAllowFilesList("doc,text");
//4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,jsp,htm,html扩展名的文件或没有扩展名的文件
//su.setDeniedDilesList("exe,bat,jsp,html,htm,,");
//上传文件
su.upload();
//将上传文件全部保存到指定目录
int
count=su.save("/upload");
out.println(count+"个上传文件成功!<br>");
//利用Request对象获取参数之值
out.println("test="+su.getRequest().getParameter("test")+"<br><br>");
//逐一提取上传文件信息,同时可保存文件。
for(int
i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File
file=su.getFiles().getFile(i);
//若文件不存在则继续
if(file.isMissing())
continue;
//显示当前文件信息
out.println("<table
border=1>");
out.println("<tr><td>表单项名(FiledName)</td><td>"+file.getFieldName()+"</tr></tr>");
out.println("<tr><td>文件长度(Size)</td><td>"+file.getSize()+"</td><td>");
out.println("<tr><td>文件名(FileName)</td><td>"+file.getFileName()+"</tr></tr>");
out.println("<tr><td>文件扩展名(FiledExt)</td><td>"+file.getFileExt()+"</tr></tr>");
out.println("<tr><td>文件全名(FiledPathName)</td><td>"+file.getFilePathName()+"</tr></tr>");
out.println("</table><br>");
//将文件另存
//file.saveAs("/upload/"+myFile.getFileName());
//另存到以web应用程序的根目录为文件根目录的目录下
//file.saveAs("/upload/"+myFile.getFileName(),su.SAVE_VIRTUAL);
//另存到操作系统的根目录为文件根目录的目录下
//file.safeAs("c://temp//"+myFile.getFileName(),su.SAVE_PHYSICAL);
}
上面就是了。。。。祝你好运哈!
㈥ jsp+servlet 怎么实现文件上传
你要做文件上传吧 form表单里一定要设置这两个值enctype="multipart/form-data" method="post"
上传成功后会在tomcat里有那个文件 ,至于你说的要获取io流。那就需要找到那个文件给你写一下伪码吧:
//获得上传文件的路径
String path = getServletContext().getRealPath(webpath);
File file = new File(path);
file.getParentFile().mkdirs();
file.createNewFile();
// 获得流
InputStream in = item.getInputStream();
OutputStream out = new FileOutputStream(file);
不懂的再问我!
建议你用个上传组件,fileupload什么的