jsp实现文件上传和下载(代码及说明)

合集下载

用JSP实现拖拽上传文件和文件夹

用JSP实现拖拽上传文件和文件夹

用JSP实现拖拽上传文件和文件夹JSP(JavaServer Pages)是一种动态网页技术,允许将Java代码嵌入到HTML页面中。

拖拽上传文件和文件夹是一种常见的网页交互功能,可以使用JSP来实现。

在实现拖拽上传文件和文件夹功能之前,首先需要了解一下拖拽上传的基本原理。

在HTML中,可以通过Drag and Drop API来获取拖拽的文件和文件夹。

然后,可以使用JavaScript将拖拽的文件和文件夹发送到服务器端,服务器端可以使用JSP来处理这些文件和文件夹。

以下是一个基本的实现拖拽上传文件的JSP页面的示例:```htmlpageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>拖拽上传文件</title><script>function handleDrop(event)event.preventDefault(; // 禁止浏览器打开文件var files = event.dataTransfer.files;//遍历上传的文件for (var i = 0; i < files.length; i++)var file = files[i];// 创建FormData对象,用于发送文件到服务器var formData = new FormData(;formData.append("file", file);// 创建一个XMLHttpRequest对象,发送文件到服务器var xhr = new XMLHttpRequest(;xhr.open("POST", "upload.jsp", true);xhr.onreadystatechange = functioif (xhr.readyState == 4 && xhr.status == 200)//上传成功console.log(xhr.responseText);}};xhr.send(formData);}}</script></head><body ondragover="event.preventDefault(;"ondrop="handleDrop(event);"><h1>拖拽上传文件</h1><p>将文件拖拽到此处上传</p></body></html>```当文件被拖拽到页面的时候,`handleDrop(`函数会被调用。

用JSP编写文件上传

用JSP编写文件上传

用JSP编写文件上传袁毅:2000-10-23如果你曾用VB编写文件上传的组件的话,那么用JAVA编写文件上传的JAVABEAN十分容易。

下面的例子只是一个简版package yuanyifileup;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.PageContext;public class yuanyifileup{private ServletRequest request;private ServletResponse response;private ServletConfig config;ServletInputStream DATA;int FormSize;File f1;FileOutputStream os;DataInputStream is;String filename;byte[] b;byte t;boolean flag=false;public yuanyifileup(){ }public void initialize(ServletConfig config,HttpServletRequest request,HttpServlet Response response) throws IOException{this.request=request;this.response=response;this.config=config;DATA = request.getInputStream();FormSize=request.getContentLength();}public void initialize(PageContext pageContext) throws IOException{request=pageContext.getRequest();response=pageContext.getResponse();config=pageContext.getServletConfig();DATA = request.getInputStream();FormSize=request.getContentLength(); }public boolean setFilename(String s) {try{File f1=new File(s);os=new FileOutputStream(f1);}catch(IOException e){return(false);}return(true);}public void getByte(){int i=0;try{is=new DataInputStream(DATA);b=new byte[FormSize];while (true){try{t=is.readByte();b[i]=t;i++;}catch(EOFException e) { break;}}is.close();}catch(IOException e) {}}public boolean save() {int i=0,start1=0,start2=0; String temp="";if (!flag){getByte();flag=true;}try{temp=new String(b,"ISO8859_1");}catch(UnsupportedEncodingException e) {return(false);}start1=temp.indexOf("image/");temp=temp.substring(start1);start1=temp.indexOf("");temp=temp.substring(start1+4);start2=temp.indexOf(";");if (start2!=-1){temp=temp.substring(0,start2);}try{byte[] img=temp.getBytes("ISO8859_1");for (i=0;i<img.length;i++){ os.write(img[i]); }os.close();}catch(IOException e){return(false);}return(true);}如果有不明白的发E-Mail:yymailbox@.Bye }。

Java文件上传与文件下载实现方法详解

Java文件上传与文件下载实现方法详解

Java⽂件上传与⽂件下载实现⽅法详解本⽂实例讲述了Java⽂件上传与⽂件下载实现⽅法。

分享给⼤家供⼤家参考,具体如下:Java⽂件上传数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传。

⽂件上传是数据上传的⼀种特例,指客户端向服务器上传⽂件。

即将保存在客户端的⽂件上传⼀个副本到服务器,并保存在服务器中。

1、上传表单要求⽂件上传要求客户端提交特殊的请求——multipart请求,即包含多部分数据的请求。

必须将<form/>标签的enctype属性值设为“multipart/form-data”,enctype表⽰encodingType,及编码类型由于客户端上传⽂件的⼤⼩是不确定的,所以http协议规定,⽂件上传的数据要存放于请求正⽂中,不能出现在URL地址栏内。

也就是说,想要上传⽂件必须提交POST请求。

表单中要有<input type="file" />标签注意:multipart/form-data请求与普通请求不同2、下载⽂件上传jar包并查看官⽅⽂档选择Commons中的FileUpload项⽬,并下载jar包和源⽂件查看FileUpload的⼯作⽅式查看FileUpload项⽬的API3、使⽤第三⽅jar包上传⽂件public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;public RegisterServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().append("Served at: ").append(request.getContextPath());}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//第⼀步、判断请求是否为multipart请求if(!ServletFileUpload.isMultipartContent(request)) {throw new RuntimeException("当前请求只⽀持⽂件上传");}try {//第⼆步、创建FileItem⼯⼚DiskFileItemFactory factory = new DiskFileItemFactory();//设置临时⽂件存储⽬录String path = this.getServletContext().getRealPath("/Temp");File temp = new File(path);factory.setRepository(temp);//单位:字节。

jsp下载文件的实现方法 及 注意

jsp下载文件的实现方法 及 注意
response.setContentType("application/force-download");//设置为下载application/force-download
这样,就可以保证在用户点击下载链接的时候浏览器一定会弹出提示窗口来询问你是下载还是直接打开并允许你选择要打开的应用程序,除非你设置了浏览器的一些默认行为。
//application.getRealPath("/main/mvplayer/CapSetup.msi");获取的物理路径
String filedownload = "想办法找到要提供下载的文件的物理路径+文件名";
String filedisplay = "给用户提供的下载文件名";
{
in.close();
in = null;
}
//这里不能关闭
//if(outp != null)
//{
//outp.close();
//outp = null;
//}
}
%>
对于第二种方法,我认为应该是比较常用的。不过有几个地方是值得我们注意的:
java.io.OutputStream outp = null;
java.io.FileInputStream in = null;
try
{
outp = response.getOutputStream();
in = new FileInputStream(filenamedownload);
{
in.close();
in = null;
}
//这里不能关闭

用Jsp来实现文件下载功能的几种方式

用Jsp来实现文件下载功能的几种方式

1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。

这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。

这个就不写示例了。

2.在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。

(示例如下)
3.既然是JSP的话,还有一种方式就是用Applet来实现文件的下载。

不过客户首先得信任你的这个Applet小程序,由这个程序来接受由servlet发送来的数据流,并写入到本地。

servlet端示例
JApplet端示例
4.顺便把JApplet上传文件的代码也贴上来. JApplet端示例
servlet端代码示例
总结:在文件的传输中是流的形式存在的,在硬盘上是文件的形式存在的。

我们要做的只是通过HttpServletRequest和HttpServletResponse,或者是response和request来发送流和读取流。

以及把文件转换成流或把流转换成文件的操作。

chap5_JSP中的文件操作

chap5_JSP中的文件操作
3
File类
File类的对象主要用来获取文件本身的一些 信息,例如文件所在的目录、文件的长度、 文件读写权限等,不涉及对文件的读写操作, 主要操作包括获取文件属性和管理目录 File对象的构造方法: File(String filename); File(String directoryPath, String filename ); File(File f, String filename);

11
FlieOutputStream类
构造函数: FileOutputStream(String name); FileOutputStream(File file); 参数name和file指定的文件称为输出流的目的地,通 过向输出流写入数据把信息送往目的地 一般是在try-catch语句的try块部分创建输出流对象, 在catch(捕获)部分检测并处理这个异常 void write(byte b[]); void write(byte b[], int off, int len);
17
RandomAccessFile类



RandomAccessFile流的指向既可以作为源,也可以 作为目的地 当需要对一个文件进行读写操作时,可以创建一个指 向该文件的RandomAccessFile流,这样既可以读也 可以写 RandomAccessFile(String name, String mode) RandomAccessFile(File file, String mode) 参数mode取r或rw,决定对流文件的访问权限 方法seek(long a)用来移动RandomAccessFile流指 向的文件的指针,参数a确定文件指针距离文件开头的 字节位置 方法getFilePointer()可以获取当前文件指针的位置

jsp上传图片完整代码

jsp上传图片完整代码
Calendar cal=Calendar.getInstance();
String filename=String.valueOf(cal.getTimeInMillis());
saveurl=request.getRealPath("/")+url;
{
sma.setAllowedFilesList("jpg,gif");
sma.upload();
}catch(Exception e){
%>
<script language="jscript">
if(myf.isMissing()){
%>
<script language="jscript">
alert("请选择要上传的文件!")
window.location.href="upfile.jsp"
</script>
<html>
<head>
<title>My JSP 'uploadimage.jsp' starting page</title>
</head>
<body>
<%
SmartUpload sma=new SmartUpload();
out.println("图片上传成功!");
response.sendRedirect("showimg.jsp");
}
}
}catch(Exception e){

jspSmartUpload使用文档

jspSmartUpload使用文档

一、安装篇jspSmartUpload是由网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。

该组件有以下几个特点:1、使用简单。

在JSP文件中仅仅书写三五行JAVA代码就可以搞定文件的上传或下载,方便。

2、能全程控制上传。

利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。

3、能对上传的文件在大小、类型等方面做出限制。

如此可以滤掉不符合要求的文件。

4、下载灵活。

仅写两行代码,就能把Web服务器变成文件服务器。

不管文件在Web服务器的目录下或在其它任何目录下,都可以利用jspSmartUpload进行下载。

5、能将文件上传到数据库中,也能将数据库中的数据下载下来。

这种功能针对的是MYSQL 数据库,因为不具有通用性,所以本文不准备举例介绍这种用法。

jspSmartUpload组件可以从网站上自由下载,压缩包的名字是jspSmartUpload.zip。

下载后,用WinZip或WinRAR将其解压到Tomcat的webapps目录下(本文以Tomcat服务器为例进行介绍)。

解压后,将webapps/jspsmartupload目录下的子目录Web-inf名字改为全大写的WEB-INF,这样一改jspSmartUpload类才能使用。

因为Tomcat对文件名大小写敏感,它要求Web应用程序相关的类所在目录为WEB-INF,且必须是大写。

接着重新启动Tomcat,这样就可以在JSP文件中使用jspSmartUpload组件了。

注意,按上述方法安装后,只有webapps/jspsmartupload目录下的程序可以使用jspSmartUpload组件,如果想让Tomcat服务器的所有Web应用程序都能用它,必须做如下工作:1.进入命令行状态,将目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

特点:1.可以多文件上传;2.返回上传后的文件名;3.form表单中的其他参数也可以得到。

先贴上传类,JspFileUploadpackage com.vogoal.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Hashtable;import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; /** vogoalAPI 1.0* Auther SinNeR@* by * mail: vogoals@hotm *//*** JSP上传文件类** @author SinNeR* @version 1.0*/public class JspFileUpload {/** request对象*/private HttpServletRequest request = null;/** 上传文件的路径*/private String uploadPath = null;/** 每次读取得字节的大小*/private static int BUFSIZE = 1024 * 8;/** 存储参数的Hashtable */private Hashtable paramHt = new Hasptable();/** 存储上传的文件的文件名的ArrayList */private ArrayList updFileArr = new ArrayList();/*** 设定request对象。

** @param request* HttpServletRequest request对象*/public void setRequest(HttpServletRequest request) {this.request = request;}/*** 设定文件上传路径。

** @param path* 用户指定的文件的上传路径。

*/public void setUploadPath(String path) {this.uploadPath = path;}/*** 文件上传处理主程序。

&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;B ** @return int 操作结果0 文件操作成功;1 request对象不存在。

2 没有设定文件保存路径或者文件保存路径不正确;3* 没有设定正确的enctype;4 文件操作异常。

*/public int process() {int status = 0;// 文件上传前,对request对象,上传路径以及enctype进行check。

status = preCheck();// 出错的时候返回错误代码。

if (status != 0)return status;try {// &#65533;&#65533;参数或者文件名&#65533;u&#65533;&#65533; String name = null;// 参数的valueString value = null;// 读取的流是否为文件的标志位boolean fileFlag = false;// 要存储的文件。

File tmpFile = null;// 上传的文件的名字String fName = null;FileOutputStream baos = null;BufferedOutputStream bos = null;// &#65533;&#65533;存储参数的HashtableparamHt = new Hashtable();updFileArr = new ArrayList();int rtnPos = 0;byte[] buffs = new byte[BUFSIZE * 8];// &#65533;取得ContentTypeString contentType = request.getContentType();int index = contentType.indexOf("boundary=");String boundary = "--" + contentType.substring(index + 9);String endBoundary = boundary + "--";// &#65533;从request对象中取得流。

ServletInputStream sis = request.getInputStream();// 读取1行while ((rtnPos = sis.readLine(buffs, 0, buffs.length)) != -1) { String strBuff = new String(buffs, 0, rtnPos);// 读取1行数据&#65533;n&#65533;&#65533;if (strBuff.startsWith(boundary)) {if (name != null && name.trim().length() > 0) {if (fileFlag) {bos.flush();baos.close();bos.close();baos = null;bos = null;updFileArr.add(fName);} else {Object obj = paramHt.get(name);ArrayList al = new ArrayList();if (obj != null) {al = (ArrayList) obj;}al.add(value);System.out.println(value);paramHt.put(name, al);}}name = new String();value = new String();fileFlag = false;fName = new String();rtnPos = sis.readLine(buffs, 0, buffs.length);if (rtnPos != -1) {strBuff = new String(buffs, 0, rtnPos);if (strBuff.toLowerCase().startsWith("content-disposition: form-data; ")) {int nIndex = strBuff.toLowerCase().indexOf("name=\"");int nLastIndex = strBuff.toLowerCase().indexOf("\"", nIndex + 6);name = strBuff.substring(nIndex + 6, nLastIndex); }int fIndex = strBuff.toLowerCase().indexOf("filename=\"");if (fIndex != -1) {fileFlag = true;int fLastIndex = strBuff.toLowerCase().indexOf("\"", fIndex + 10);fName = strBuff.substring(fIndex + 10, fLastIndex); fName = getFileName(fNam e);if (fName == null || fName.trim().length() == 0) { fileFlag = false;sis.readLine(buffs, 0, buffs.length);sis.readLine(buffs, 0, buffs.length);sis.readLine(buffs, 0, buffs.length);continue;}else{fName = getFileNameByTime(fName);sis.readLine(buffs, 0, buffs.length);sis.readLine(buffs, 0, buffs.length);}}}} else if (strBuff.startsWith(endBoundary)) {if (name != null && name.trim().length() > 0) {if (fileFlag) {bos.flush();baos.close();bos.close();baos = null;bos = null;updFileArr.add(fName);} else {Object obj = paramHt.get(name);ArrayList al = new ArrayList();if (obj != null) {al = (ArrayList) obj;}al.add(value);paramHt.put(name, al);}}} else {if (fileFlag) {if (baos == null && bos == null) {tmpFile = new File(uploadPath + fName);baos = new FileOutputStream(tmpFile);bos = new BufferedOutputStream(baos);}bos.write(buffs, 0, rtnPos);baos.flush();} else {System.out.println("test :" + value + "--" + strBuff); value = value + strBuff;}}}} catch (IOException e) {status = 4;}return status;}private int preCheck() {int errCode = 0;if ( request == null )return 1;if ( uploadPath == null || uploadPath.trim().length() == 0 ) return 2;else{File tmpF = new File(uploadPath);if (!tmpF.exists())return 2;}String contentType = request.getContentType();if ( contentType.indexOf("multipart/form-data") == -1 )return 3;return errCode;}public String getParameter(String name){String value = "";if ( name == null || name.trim().length() == 0 )return value;value = (paramHt.get(name) ==null)?"":(String)((ArrayList)paramHt.get(name)).get(0);return value;}public String[] getParameters(String name){if ( name == null || name.trim().length() == 0 )return null;if ( paramHt.get(nam e) == null )return null;ArrayList al = (ArrayList)paramHt.get(nam e); String[] strArr = new String[al.size()];for ( int i=0;i<al.size();i++ )strArr[i] = (String)al.get(i);return strArr;}public int getUpdFileSize(){return updFileArr.size();}public String[] getUpdFileNames(){String[] strArr = new String[updFileArr.size()]; for ( int i=0;i<updFileArr.size();i++ )strArr[i] = (String)updFileArr.get(i);return strArr;}private String getFileName(String input){int fIndex = stIndexOf("\\");if (fIndex == -1) {fIndex = stIndexOf("/");if (fIndex == -1) {return input;}}input = input.substring(fIndex + 1);return input;}private String getFileNameByTime(String input){int index = input.indexOf(".");Date dt = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");return input.substring(0,index) + sdf.format(dt) + input.substring(index);}}说明:这个类基本解决了上一贴的上一贴说的存在的bug和不足。

相关文档
最新文档