用JSP实现文件上传功能

合集下载

用JSP实现文件上传功能

用JSP实现文件上传功能

用JSP实现文件上传功能JSP(JavaServer Pages)是一种用于在服务器上生成动态网页的Java技术。

通过使用JSP,可以实现文件上传功能,使用户能够将文件上传到服务器。

一、前端页面设计:1.创建一个HTML表单,用于用户选择要上传的文件。

2. 指定表单的enctype属性为“multipart/form-data”,以支持文件上传。

3.添加一个提交按钮,用于触发文件上传的动作。

二、后端代码实现:1.在JSP页面上添加以下代码,用于接收和处理文件上传的请求:```jsp<%String uploadPath = "指定文件上传的目标路径"; // 指定文件上传的目标路径,例如:"/uploads/"DiskFileItemFactory factory = new DiskFileItemFactory(;ServletFileUpload upload = new ServletFileUpload(factory);tryList<FileItem> items = upload.parseRequest(request);for (FileItem item : items)if (!item.isFormField() { // 判断是否为上传文件String fileName = new File(item.getName().getName(;String filePath = uploadPath + File.separator + fileName;File storeFile = new File(filePath);item.write(storeFile); // 保存文件到服务器out.println("文件上传成功!");}}} catch (Exception e)out.println("文件上传失败!");e.printStackTrace(;%>```2. 创建一个文件夹用于存储上传的文件,例如在项目根目录下创建一个名为"uploads"的文件夹。

JSP使用输入流和输出流实现文件上传示例

JSP使用输入流和输出流实现文件上传示例

以下代码演示了在JSP页面中使用输入流和输出流实现文件上传1.创建upload.jsp页面:<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <html><head><title>一个简单的文件上传</title></head><body><form action="doUpload.jsp" method="post">标题:<input type="text" name="title"><br>文件位置:<input type="file" name="mfile"><br><input type="submit" value="提交"></form></body></html>2.创建doUpload.jsp页面<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GBK"%><html><head><title>My JSP 'doUpload.jsp' starting page</title></head><body><%request.setCharacterEncoding("GBK");String title = request.getParameter("title"); //获取页面提交的标题信息String myFile = request.getParameter("mfile"); //获取页面提交的文件int indexOf = stIndexOf("\\"); //获取最后一个“\”所在的索引位String fileName = myFile.substring(indexOf); //获取文件上传的文件名//创建输出流把指定的文件写入WEB工程的upload目录下(需要在WebRoot目录下创建upload目录)。

jsp之文件上传

jsp之文件上传

很多初学jsp的同志都在实现文件上传到服务器这方面不是很了解,今天在这里我会帮助大家慢慢的实现这一功能。

准备工作:1.到网上下载两个包第一个叫做commons-fileupload-1.2.1.jar第二个叫做commons-io-1.3.2.jar2. 建一个项目用来实现文件上传我创建的Web项目名为fileUpload,截图如下3.我们把从网上下载下来的包copy到WebRoot目录下Web-INF下的子目录lib目录里然后打开Referenced Libraries,你会看见两个包已经存在于里面了。

下面我们开始实现文件上传1. 首先我们创建一个名为uploadFile.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>实现文件上传到服务器</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="doFileUpload.jsp"method="post"enctype="multipart/form-data">文件:<input type="file"name="chooseFile"/></br>姓名:<input type="text"name="userName"/></br><input type="submit"value="提交"></form></body></html>注意:form表单里的enctype=”multipart/form-data”这一属性一定要写,这是用来标明此表单的类型是文件类型的。

jsp实现文件上传和下载

jsp实现文件上传和下载

1 JSP文件上传简单实例1、index.html代码:<html><head><title>上传图片</title></head><body><form action="do_upload.jsp" method="post" enctype="multipart/form-data"><input type="file" name="Photo"><input type="submit" value="上传"></form></body></html>2、使用到的函数和类说明File类文件和目录路径名的抽象表示形式,File(parent,child)方法根据parent 抽象路径名和child 路径名字符串创建一个新File实例FileOutputStream文件输出流,InputStream输入流,将输入数据看成一根管道,可以形象的将输入流比喻成管道的入口,而输出流比喻成管道的出口。

read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。

read() 从此输入流中读取一个数据字节。

write(int b) 将指定字节写入此文件输出流,write(byte[] b, int off, int len) 将指定字节数组中从偏移量off 开始的len 个字节写入此文件输出流。

write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中Random.readLine()逐行读入,Random.seek(int pos)设置到此文件开头测量到的文件指针偏移量,该位置发生下一个读取和写入操作,Random.getFilePointer()返回此文件当前偏移量,Random.readByte()此方法从该文件的当前文件指针开始读取第一个字节。

js实现文件上传功能后台使用MultipartFile

js实现文件上传功能后台使用MultipartFile

js实现文件上传功能后台使用MultipartFile在前端使用JavaScript实现文件上传功能,可以通过使用`FormData`对象来实现。

首先,我们需要创建一个HTML表单,并添加一个文件输入字段。

```html<form id="uploadForm"><input type="file" name="file" id="fileInput"><button type="submit">上传</button></form>```接下来,在JavaScript中,我们可以监听表单的提交事件,并在事件处理程序中获取文件数据,并将其发送到后台。

```javascriptdocument.getElementById('uploadForm').addEventListener('subm it', function(event)event.preventDefault(; // 阻止表单默认提交行为var fileInput = document.getElementById('fileInput');var file = fileInput.files[0];var formData = new FormData(;formData.append('file', file);//发送文件数据到后台var xhr = new XMLHttpRequest(;xhr.open('POST', '/upload'); // 替换成你的后台接口地址xhr.send(formData);});```在后台使用Spring框架时,可以使用`MultipartFile`来接收上传的文件。

手把手教Jsp上传文件

手把手教Jsp上传文件

手把手教Jsp上传文件(FileUpload+Servlet)所遇到的问题问题一:String fileName = fis.getName().substring(fis.getName().lastIndexOf(""""));//获得上传文件的文件名中""""应未“\\”,lastIndexOf()返回 String 对象中子字符串最后出现的位置。

stIndexOf(substring[, startindex])参数strObj必选项。

String 对象或文字。

substring必选项。

要在 String 对象内查找的子字符串。

startindex可选项。

该整数值指出在 String 对象内进行查找的开始索引位置。

假如省略,则查找从字符串的末尾开始。

说明lastIndexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。

假如没有找到子字符串,则返回 -1。

假如 startindex 是负数,则 startindex 被当作零。

假如它比最大字符位置索引还大,则它被当作最大的可能索引。

从右向左执行查找。

否则,该方法和 indexOf 相同。

下面的示例说明了 lastIndexOf 方法的用法:string filepath = "ALow\\K-1s\\2006\\arex1.txt";int i_s = stIndexOf("\\");//最后一个\\前面有14个字符,所以i_s=14string s = filepath.Substring(stIndexOf("\\") + 1);//从第15个字符开始,不包括第15个,取剩下的所有字符此处""""(“\\”)是指截取\及\后的字符,主要确定要传入的文件名,例\ ceshi1.bmp\为转义符\\转义结果为\同理String tmpPath = "f:""tmpdir";String savePath = "f:""updir";为String tmpPath = "f:\\tmpdir";//初始化上传文件的临时存放目录String savePath = "f:\\updir";//初始化上传文件后的保存目录问题二:页面的调用,此模式是先在tomcat中显示页面,再在页面内调用Servlet因此要保证路径正确我的项目名是upload我的jsp名为upload.jsp因此输入的路径为入http://localhost:8080/upload/upload.jsp问题三:页面action的写入upload.jsp sp中<form name="upform" action="UploadServlet" method="POST" enctype="multipart/form-data">问题四:Servlet的的配置Web.xml中<servlet><servlet-name>UploadServlet</servlet-name><servlet-class>UploadServlet</servlet-class></servlet><servlet-mapping><servlet-name>UploadServlet</servlet-name><url-pattern>/UploadServlet</url-pattern>问题五:处理方法为了安全性使用的是dopost方法问题六:Servlet的路径因为我的Web.xml<url-pattern>/UploadServlet</url-pattern>所以我若直接调用Servlet时路径为http://localhost:8080/upload/UploadServlet。

jsp原始方式上传文件

jsp原始方式上传文件
String url = ""; //图片地址
String fileName = "";
String state="SUCCESS";
String timeStrFileName = "";
while(fii.hasNext()){
FileItemStream fis = fii.next();
}
byte c [] = new byte[10];
int n = 0;
while((n=in.read(c))!=-1){
title = new String(c,0,n);
dff.setSizeThreshold(1024000);
ServletFileUpload sfu = new ServletFileUpload(dff);
FileItemIterator fii = sfu.getItemIterator(request);
String title = ""; //图片标题
//保存文件路径
String filePath = "uploadfiles";
String realPath = request.getRealPath("/")+filePath;
//判断路径是否存在,不存在则创建
File dir = new File(realPath);
if(!dir.isDirectory())
BufferedOutputStream output = new BufferedOutputStream(a);
Streams.copy(in, output, true);//开始把文件写到你指定的上传文件夹

Jsp页面实现文件上传下载

Jsp页面实现文件上传下载

Jsp页面实现文件上传下载第1 页jsp页面实现文件上传代码开发的过程见用TOMCAT作简单的jsp web开发名称:jsp页面上传类作者:SinNeRMail:vogoals[at]特点:1可以多文件上传;2返回上传后的文件名;3form表单中的其他参数也可以得到。

先贴上传类,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*************************** by *mail:********************//*** 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对象。

JSP使用输入流和输出流实现文件上传示例

JSP使用输入流和输出流实现文件上传示例

JSP使用输入流和输出流实现文件上传示例JSP文件上传示例代码如下:```jsp<!DOCTYPE html><html><head><title>文件上传示例</title></head><body><h1>文件上传示例</h1><%//处理文件上传请求if (request.getMethod(.equalsIgnoreCase("POST"))//设置保存上传文件的目录String uploadDir = "D:/uploads";File dir = new File(uploadDir);if (!dir.exists()dir.mkdir(;}//获取请求中的所有文件Collection<Part> parts = request.getParts(;//遍历所有文件for (Part part : parts)//获取文件名String fileName = extractFileName(part);//将文件保存到服务器的目录中part.write(uploadDir + File.separator + fileName);//显示文件名out.println("上传的文件名:" + fileName + "<br>");}}// 从 Part 获取文件名的方法private String extractFileName(Part part)String contentDisp = part.getHeader("content-disposition"); String[] items = contentDisp.split(";");for (String s : items)if (s.trim(.startsWith("filename"))return s.substring(s.indexOf("=") + 2, s.length(-1);}}return "";}%><!--文件上传表单--><form action="" method="post" enctype="multipart/form-data"> <input type="file" name="file1" /><br><input type="file" name="file2" /><br><input type="submit" value="上传" /></form></body></html>```上述示例中的代码实现了文件上传的功能。

JSP实现文件上传功能

JSP实现文件上传功能

JSP实现⽂件上传功能本⽂实例为⼤家分享了JSP实现⽂件上传功能的具体代码,供⼤家参考,具体内容如下⼀、准备部分需要fileupload.jar与io.jar包共同完成。

构建完成路径后可继续。

⼆、页⾯部分<form action="UploadServlet" method="post" enctype="multipart/form-data">学号:<input type="text" name="sno"/><br/>姓名:<input type="text" name="sname"/><br/>上传照⽚:<input type="file" name="spicture"/><br/><input type="submit" value="注册"/></form>注意:1.⽂件上传必须要使⽤post,以避免⽤get⽅法时传输总量超过搜索框所能承载最⼤字符数。

2.必须加⼊enctype="multipart.form-data"字段3.⽂件处需⽤“file”三、Servlet部分package webtest;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import mons.fileupload.FileItem;import mons.fileupload.FileItemFactory;import mons.fileupload.FileUploadBase;import mons.fileupload.FileUploadException;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;/*** Servlet implementation class UploadServlet*/@WebServlet("/UploadServlet")public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");// 请求编码处理,传输时response.setCharacterEncoding("utf-8");// 响应编码处理,传输时response.setContentType("utf-8");// 响应编码处理,显⽰时boolean isMultipart = ServletFileUpload.isMultipartContent(request);// 判断是否有entype="multipart/form-data"部分if (isMultipart) {try {FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);//设置上传时的内存缓冲区⼤⼩,超出时写⼊临时⽂件 10kb((DiskFileItemFactory) factory).setSizeThreshold(10240);//单位byte//设置临时⽂件⽬录,防⽌系统空间不⾜((DiskFileItemFactory) factory).setRepository(new File(request.getSession().getServletContext().getRealPath("Uploadtemp")));//动态获取Uploadtemp⽂件夹位于该项⽬中的位置 //控制上传单个⽂件的最⼤值 20kbupload.setSizeMax(20480);//单位byteList<FileItem> items = upload.parseRequest(request);// 解析form中的所有请求字段,并保存在item中Iterator<FileItem> iter = items.iterator();while (iter.hasNext()) {// 解析时⽆顺序,因此需根据名字查找FileItem item = iter.next();if (item.isFormField()) {//⾮⽂件数据String itemName = item.getFieldName();//获取⾮⽂件的范围数据名if (itemName.equals("sno")) {int sno = -1;sno = Integer.parseInt(item.getString("utf-8"));}else if (itemName.equals("sname")) {String sname = null;sname = item.getString("utf-8");}else {System.out.println("其他字段...");}} else {//⽂件上传String fileName = item.getName();//获取⽂件范围数据。

JSP实现快速上传文件的方法

JSP实现快速上传文件的方法

JSP实现快速上传⽂件的⽅法本⽂实例讲述了JSP实现快速上传⽂件的⽅法。

分享给⼤家供⼤家参考。

具体如下:这⾥演⽰JSP不使⽤第三⽅库,实现快速上传⽂件的功能1. FileUpload.java:p ackage FileUpload;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import javax.servlet.ServletInputStream;/****//*** @author Qch**/public class FileUpload{ServletInputStream in=null;String fpath="C://";public FileUpload(){fpath="C://";in=null;}public void setInputStream(ServletInputStream in){this.in=in;}public void setFpath(String p){this.fpath=p;}public String getFpath(){return fpath;}public String getParameter(){String r=null;try{r=getParameter(in);}catch (Exception e){e.printStackTrace();}return r;}public long getFileUpload(){long r=-1;try{r=getFileUpload(in,fpath);}catch (Exception e){e.printStackTrace();}return r;}public String getParameter(ServletInputStream in)// 只能按顺序提取throws Exception{int l = 0;byte[] b = new byte[1024];l = in.readLine(b, 0, b.length);// 依次是读取属性的开始符、名称、属性值的类型、属性的值String si = new String(b);if (si.startsWith("----------------------------")){// 表⽰是从开始符开始读,否则应为刚读取⽂件后的⼀个属性,此时应少读⼀次l = in.readLine(b, 0, b.length);}l = in.readLine(b, 0, b.length);l = in.readLine(b, 0, b.length);String value = new String(b, 0, l);return value;}public long getFileUpload(ServletInputStream in, String fpath)// 需要提供输⼊流和存储路径 throws Exception{// out.println("⽂件信息:<br>");long begin = System.currentTimeMillis();// 传送时间计时开始int l = 0;byte[] b = new byte[1024];l = in.readLine(b, 0, b.length);String sign = new String(b, 0, l);// eg.-----------------------------7d9dd29630a34l = in.readLine(b, 0, b.length);String info = new String(b, 0, l);// eg.Content-Disposition:form-data;// name="file";l = in.readLine(b, 0, b.length);// String type=new// String(b,0,l);//eg.Content-Type:application/octet-stream(程序⽂件)l = in.readLine(b, 0, b.length);// String nulll=new String(b,0,l);//此值应为空int nIndex = info.toLowerCase().indexOf("filename=\"");int nLastIndex = info.toLowerCase().indexOf("\"", nIndex + 10);String filepath = info.substring(nIndex + 10, nLastIndex);int na = stIndexOf("\\");String filename = filepath.substring(na + 1);// out.println("⽂件绝对路径:"+filepath+"<br>");// out.println("⽂件名:"+filename+"<br><br>");String path=fpath + filename;File fi = new File(path);// 建⽴⽬标⽂件if (!fi.exists()&&!fi.createNewFile())return -2;BufferedOutputStream f = new BufferedOutputStream(new FileOutputStream(fi));while ((l = in.readLine(b, 0, b.length)) > 0){if (l == sign.length()){String sign1 = new String(b, 0, sign.length());// out.println(sign1+"<br>");if (sign1.startsWith(sign))// ⽐对是否⽂件已传完break;}f.write(b, 0, l);f.flush();}f.flush();f.close();long end = System.currentTimeMillis();// 传送时间计时结束// out.println("上传⽂件⽤时:"+(end-begin)+"毫秒<br>");return end - begin;}}2. submitFile.jsp:<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%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 'submitFile.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">--><script language="javascript">function check(){if (.value==""){alert("姓名不能为空!!");.focus();return false;}if (document.form2.file.value==""){alert("⽂件不能为空!!");return false;}return true;}</script></head><body><br><form method="post" name="form2" enctype="MULTIPART/FORM-DATA"action="AnswerFile.jsp"><br><p align="center">&nbsp;<br></p><table width="530" border="1" bgcolor="#c0c0c0" align="center"height="91"><tbody><tr><td valign="top" align="right">姓名<br></td><td valign="top"><input type="text" name="name"></td></tr><tr><td align="right">&nbsp; ⽂件</td><td align="left">&nbsp;<input type="file" name="file"></td></tr><tr><td valign="top" align="right">⽂件类型<br></td><td valign="top" align="left"><select size="1" name="leixing"><option selected value="作业">作业</option><option value="课程设计">课程设计</option><option value="论⽂">论⽂</option></select></td></tr><tr><td align="right"><input type="Submit" value="上传" name="button2" onclick="return(check());"> </td><td align="left">&nbsp;<input type="reset" value="重置" name="button3"></td></tr></tbody></table><p>&nbsp;<br><br>&nbsp;</p></form></body></html>3. AnswerFile.jsp:<%@ page language="java" import="java.util.*,java.io.*"pageEncoding="GB18030"%><%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 'AnswerFile.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><jsp:useBean id="upload" scope="session" class="FileUpload.FileUpload"/> <jsp:setProperty name="upload" value="C://" property="fpath"/><%ServletInputStream in = request.getInputStream();upload.setInputStream(in);String nam = upload.getParameter();out.println("姓名:" + nam + "<br><br>");long time = upload.getFileUpload();out.println("⽂件上传完毕,总共耗时:" + time + "毫秒<br>");String leixing = upload.getParameter();out.println("⽂件类型:" + leixing + "<br>");in.close();%><br><div align="right"><a href="index.jsp">回到⾸页</a></div></body></html>希望本⽂所述对⼤家的JSP程序设计有所帮助。

JSP上传文件

JSP上传文件

UploadExample.jsp<%@ page contentType="text/html;charset=gb2312"%> <html><title><%= application.getServerInfo() %></title><body>上传文件程序应用示例<form action="doUpload.jsp" method="post"enctype="multipart/form-data"><%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。

--%>请选择要上传的文件<input type="file" name="upfile" size="50"><input type="submit" value="提交"></form></body></html>doUpload.jsp<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.io.*"%><%@ page import="java.util.*"%><%@ page import="javax.servlet.*"%><%@ page import="javax.servlet.http.*"%><html><head><title>upFile</title></head><body bgcolor="#ffffff"><%//定义上载文件的最大字节int MAX_SIZE = 102400 * 102400;// 创建根路径的保存变量String rootPath;//声明文件读入类DataInputStream in = null;FileOutputStream fileOut = null;//取得客户端的网络地址String remoteAddr = request.getRemoteAddr();//获得服务器的名字String serverName = request.getServerName();//取得互联网程序的绝对地址String realPath = request.getRealPath(serverName);realPath =realPath.substring(0,stIndexOf("\\"));//创建文件的保存目录rootPath = realPath + "\\upload\\";//取得客户端上传的数据类型String contentType = request.getContentType();try{if(contentType.indexOf("multipart/form-data") >= 0){ //读入上传的数据in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength();if(formDataLength > MAX_SIZE){out.println("<P>上传的文件字节数不可以超过" + MAX_SIZE + "</p>");return;}//保存上传文件的数据byte dataBytes[] = new byte[formDataLength];int byteRead = 0;int totalBytesRead = 0;//上传的数据保存在byte数组while(totalBytesRead < formDataLength){byteRead =in.read(dataBytes,totalBytesRead,formDataLength); totalBytesRead += byteRead;}//根据byte数组创建字符串String file = new String(dataBytes);//out.println(file);//取得上传的数据的文件名String saveFile =file.substring(file.indexOf("filename=\"") + 10); saveFile = saveFile.substring(0,saveFile.indexOf("\n")); saveFile = saveFile.substring(stIndexOf("\\") + 1,saveFile.indexOf("\""));int lastIndex = stIndexOf("=");//取得数据的分隔字符串String boundary = contentType.substring(lastIndex + 1,contentType.length());//创建保存路径的文件名String fileName = rootPath + saveFile;//out.print(fileName);int pos;pos = file.indexOf("filename=\"");pos = file.indexOf("\n",pos) + 1;pos = file.indexOf("\n",pos) + 1;pos = file.indexOf("\n",pos) + 1;int boundaryLocation = file.indexOf(boundary,pos) - 4; //out.println(boundaryLocation);//取得文件数据的开始的位置int startPos = ((file.substring(0,pos)).getBytes()).length; //out.println(startPos);//取得文件数据的结束的位置int endPos =((file.substring(0,boundaryLocation)).getBytes()).length; //out.println(endPos);//检查上载文件是否存在File checkFile = new File(fileName);if(checkFile.exists()){out.println("<p>" + saveFile + "文件已经存在.</p>"); }//检查上载文件的目录是否存在File fileDir = new File(rootPath);if(!fileDir.exists()){fileDir.mkdirs();}//创建文件的写出类fileOut = new FileOutputStream(fileName);//保存文件的数据fileOut.write(dataBytes,startPos,(endPos - startPos)); fileOut.close();out.println(saveFile + "文件成功上载.</p>");}else{String content = request.getContentType();out.println("<p>上传的数据类型不是multipart/form-data</p>");}}catch(Exception ex){throw new ServletException(ex.getMessage());}%></body></html>。

JSP实现多个文件上传的两种方法

JSP实现多个文件上传的两种方法

JSP实现多个⽂件上传的两种⽅法JSP 实现多个⽂件上传的两种⽅法JSP实现⽂件上传的实现⽅式是这样的:使⽤ServletRequest类的getInputStream()⽅法获得⼀个客户端向服务器发出的数据流,然后处理这个数据流,从中分析得到⽂件上传中传递到服务器的各个参数和数据,然后将其中的⽂件数据存储为⼀个⽂件或插⼊到数据库中。

通常JSP页⾯中不处理⽂件的上传功能,⽽是把这些功能放到Servlet 或JavaBean中去实现。

使⽤Servlet完成⽂件上传的例⼦在其他JSP书籍中有所介绍,这⾥只介绍使⽤JeanBean是如何完成⽂件上传的。

JSP中实现⽂件的上传可以采⽤两种⽅式即采⽤HTTP协议和FTP协议实现,⼆者在传输的原理上存在很⼤的差异。

以下将结合源代码对它们的实现做简单介绍,相信读者会从中有所收获。

在JSP中使⽤JavaBean实现基于Web的⽂件上传功能⼀般需要三种⽂件结合完成。

这三种⽂件分别是提供界⾯的HTML页⾯⽂件、完成调⽤实现上传功能的JavaBean的JSP⽂件和实现JavaBean的Java的类⽂件。

1.采⽤HTTP协议实现多个⽂件的上传在过去的HTML页⾯中,表单不能实现⽂件的上传,这多少限制了⼀些⽹页的功能。

RFC1867规范(即HTML中实现基于表单的⽂件上传)对表单作出了扩展,增加了⼀个表单元素(input type=file)。

通过使⽤这个元素,浏览器会⾃动⽣成⼀个输⼊框和⼀个按钮,输⼊框可供⽤户填写本地的⽂件名和路径名,按钮可以让浏览器打开⼀个⽂件选择框供⽤户选择⽂件。

具体的表单实现如下:选择了⽂件后直接输⼊本地⽂件的绝对路径,表单的action属性值是*.jsp,这意味着请求(包括上载的⽂件)将发送给*.jsp⽂件。

在这个过程中实际上就实现了HTTP⽅式的⽂件上载。

⽂件从客户端到服务器的上传是由HTTP协议的通⽤⽹关界⾯(CGI)⽀持的。

这种上载⽅式要求浏览器和WEB服务器两⽅⾯都能够⽀持Rfc1867。

用JSP实现上传文件的两种方法

用JSP实现上传文件的两种方法

用JSP实现上传文件的两种方法以前用cos作文件上传但是对于文件上传后的改名还需要借助其他的工具摘录如下:在用Java开发企业器系统的使用特别是涉及到与办公相关的软件开发的时候文件的上传是客户经常要提到的要求因此有一套很好文件上传的解决办法也能方便大家在这一块的开发首先申明该文章是为了自己记录一备以后开发需要的时候不用手忙脚乱哈哈现在在国内用的非常多的一般是两种方法解决来解决文件上传cos jar + uploadbean jar + filemover jar 这个是用的非常普遍的原因是因为他操作方便是我们不必再去关注那些文件的输入和输出流使我们从底层的流中解脱出来UploadFile UploadBean MultipartFormDataRequest<%@ page contentType="text/;charset=gb " %> <head> <title>fbysss UploadBean 示例</title> <! meta equiv="Content Type" content="text/; charset=iso " > <! meta equiv="Content Type" content="text/; charset=gb " > </head> <FORM name=form METHOD="POST" ACTION="sssupload jsp" ENCTYPE="multipart/form data"> <input name=title type= "text" value="中文字"> <td >附件</td> <td > <input name=attach type=FILE id="attach" size=" " > </td> <input name=ok type= "submit" value="提交"> </form>读取表单页面sssgetdata jsp<!//======================================== ================================== //文件UploadBean上传实例//功能解决中文乱码完成文件上传并提供上传改名解决方案//作者fbysss //msn:jameslastchina@hotmail//======================================== ================================== > <%@ page contentType="text/;charset=GBK" %> <%@ page language="java" import=" jsp *** art upload *"%> <%@ page import="java text SimpleDateFormat"%> <%@ page import="java io File"%> <%@ page import="java util *"%> <%@ page import="javazoom upload *"%> <%@ page import="uploadutilities FileMover"%> <head> <meta equiv="Content Type" content="text/; charset=gb "> </head> <%request setCharacterEncoding("GBK");//设置编码格式就不用一个个转码了 FileMover fileMover = new FileMover();//你也可以使用自带的实例中jsp:useBean的形式UploadBean upBean = new UploadBean(); MultipartFormDataRequest mrequest = null; Hashtable files = null;if (MultipartFormDataRequest isMultipartFormData(request)) { mrequest = new MultipartFormDataRequest(request null * * MultipartFormDataRequest COSPARSER "GBK");//注意这里也要设置编码参数String sTt = mrequest getParameter("title"); out println("<br>Title 是 "+sTt +"<br>"); String sTt = new String(sTt getBytes("ISO ") "GBK"); out println("<br>Title 是 "+sTt +"<br>"); //这里用来测试title参数是否正确调试的时候加一句if (true)return;即可 files = mrequest getFiles(); }//获取修改前的文件名String sOldFileName =mrequest getParameter("oldfilename"); out println("sOldFileName:"+sOldFileName); String sWebRootPath = request getRealPath("/");//得到你的web应用的根String sPath=sWebRootPath+"attach"; int iFileCount = ; String sServerFileName=""; String sLocalFileName = ""; //文件获取if ( (files != null) || (!files isEmpty()) ) {iFileCount = files size(); UploadFile file = (UploadFile) filesget("attach"); sLocalFileName=file getFileName(); out println("sLocalFileName:"+sLocalFileName); int ii= sLocalFileName indexOf(" "); //取文件名的后缀String sExt = sLocalFileName substring(ii sLocalFileName length()); //得到不重复的文件名java util Date dt = new java util Date(System currentTimeMillis()); SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS"); sServerFileName= fmt format(dt); sServerFileName =sServerFileName + sExt; //如果不存在该目录则新建一个 File dir =new File(sPath); if (!dir exists()){ dir mkdirs(); } upBean setFolderstore(sPath);//设置要上传的目录upBean addUploadListener(fileMover);//增加filMover监听fileMover setNewfilename(sServerFileName);//设置服务器上的文件名upBean store(mrequest "attach");//上传out println("file path is "+sPath+"/"+sServerFileName); }%>Demo注意事项 cos jar uploadbean jar filemover jar这几个包必须有必备下载地址UploadBean FileMover 参考下载地址ChinesUpload例子参考了fbysss的一篇文章 apache struts upload FormFile Struts 的 apache struts upload FormFile类很方便不用自己写也不用写一个jsp调用jsp *** artupload就可以搞定选择上传文件页面 selfile jsp<%@ taglib uri="/WEB INF/struts tld" prefix=""%> <:> <:form action="/uploadsAction do" enctype="multipart/form data"> <:file property="theFile"/> <:submit/> </:form> </:> UpLoadAction java import java io *; import javax servlet *; import apache struts action *; import apache struts upload FormFile;/** *//** * <p>Title:UpLoadAction</p> * <p>Description: QRRSMMS </p> * <p>Copyright: Copyright (c) jiahansoft</p> *<p>Company: jiahansoft</p> * @author wanghw * @version */ public class UpLoadAction extends Action { public ActionForward execute(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws Exception { if (form instanceof uploadsForm) {//如果form 是uploadsForm String encoding = request getCharacterEncoding(); if ((encoding != null) && (encoding equalsIgnoreCase("utf "))) { response setContentType("text/; charset=gb ");//如果没有指定编码编码格式为gb } UpLoadForm theForm = (UpLoadForm ) form; FormFile file = theForm getTheFile();//取得上传的文件try { InputStream stream = file getInputStream();//把文件读入String filePath = request getRealPath("/");//取当前系统路径ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream bos = new FileOutputStream(filePath + "/" + file getFileName());//建立一个上传文件的输出流//System out println(filePath+"/"+file getFileName()); int bytesRead = ; byte[] buffer = new byte[ ]; while ( (bytesRead = stream read(buffer )) != ) { bos write(buffer bytesRead);//将文件写入服务器} bos close(); stream close(); }catch(Exception e){ System err print(e); } //request setAttribute("dat" file getFileName()); return mapping findForward("display"); } return null; } }UpLoadForm javaimport javax servlet import apache struts action *; import apache struts upload *;/** *//** * <p>Title:UpLoadForm</p> * <p>Description: QRRSMMS </p> * <p>Copyright: Copyright (c) jiahansoft</p> * <p>Company: jiahansoft</p> * @author wanghw * @version */public class UpLoadForm extends ActionForm { public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = " apache struts webapp upload MaxLengthExceeded"; protected FormFile theFile; public FormFile getTheFile() { return theFile; } public void setTheFile(FormFile theFile) { this theFile = theFile; } public ActionErrors validate(ActionMapping mapping HttpServletRequest request) { ActionErrors errors = null; //has the maximum length been exceeded? Boolean maxLengthExceeded = (Boolean) request getAttribute(MultipartRequestHandlerATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded booleanValue())) { errors = new ActionErrors(); errors add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED new ActionError("maxLengthExceeded")); } return errors;} } //这是相对应的form 还有其他属性可以设置具体可以参考struts的上传例子struts config xmllishixinzhi/Article/program/Java/JSP/201311/20075。

jsp实现文件上传和下载 及留言板功能(代码及说明)

jsp实现文件上传和下载 及留言板功能(代码及说明)

Jsp实现文件上传和下载功能以及留言板功能文件上传和下载功能特点: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@*//*** 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 HashtableparamHt = new Hasptable();/** 存储上传的文件的文件名的ArrayList */private ArrayListupdFileArr = new ArrayList();/*** 设定request对象。

jsp文件上传

jsp文件上传
//System.out.println(filePath+"/"+file.getFileName());
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {
<struts-config>
<form-beans>
<form-bean name="uploadsForm" type="UpLoadForm" />
</form-beans>
<action-mappings>
<action name="uploadsForm" type="UpLoadAction" path="/uploadsAction">
}
UpLoadForm theForm = (UpLoadForm ) form;
FormFile file = theForm.getTheFile();//取得上传的文件
try {
InputStream stream = file.getInputStream();//把文件读入
String filePath = request.getRealPath("/");//取当前系统路径
--------------------------------------------------------------------------------

JS实现文件上传下载功能实例解析

JS实现文件上传下载功能实例解析

JS实现文件上传下载功能实例解析文件上传功能:文件上传是指将本地文件传输到服务器的过程。

通常,我们需要使用HTML `<input type="file">`元素来创建一个文件上传控件。

首先,在HTML文件中添加一个文件上传控件和一个上传按钮:```html<input type="file" id="fileInput"><button onclick="upload(">上传</button>```然后,在JavaScript中实现`upload(`函数,该函数将在点击上传按钮时被调用:```javascriptfunction uploavar fileInput = document.getElementById('fileInput');var file = fileInput.files[0];if (file)var formData = new FormData(;formData.append('file', file);var xhr = new XMLHttpRequest(;xhr.open('POST', '/upload', true);xhr.onload = functioif (xhr.status === 200)console.log('文件上传成功');} elseconsole.log('文件上传失败');}};xhr.send(formData);} elseconsole.log('请选择文件');}```在`upload(`函数中,我们首先获取文件上传控件的引用,然后获取所选文件。

接下来,我们创建一个`FormData`对象,并将所选文件添加到该对象中。

jspstruts1struts2上传文件

jspstruts1struts2上传文件

一.在JSP环境中利用Commons-fileupload组件实现文件上传1.页面upload.jsp清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>2.3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN">4.<html>5. <head>6. <title>The FileUpload Demo</title>7. </head>8.9. <body>10. <form action="UploadFile" method="post" enctype="multipart/form-data">11. <p><input type="text" name="fileinfo" value="">文件介绍</p>12. <p><input type="file" name="myfile" value="阅读文件"></p>13. <p><input type="submit" value="上传"></p>14. </form>15. </body>16.</html>注意:在上传表单中,既有一般文本域也有文件上传域2.FileUplaodServlet.java清单如下:Java代码1.package org.chris.fileupload;2.3.import java.io.File;4.import java.io.IOException;5.import java.util.Iterator;6.import java.util.List;7.8.import javax.servlet.ServletException;9.import javax.servlet.http.*;10.11.import org.apachemons.fileupload.FileItem;12.import org.apachemons.fileupload.FileItemFactory;13.import org.apachemons.fileupload.disk.DiskFileItemFactory;14.import org.apachemons.fileupload.servlet.ServletFileUpload;15.16.public class FileUplaodServlet extends HttpServlet {17.18. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {19. doPost(request, response);20. }21.22. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {23.24. request.setCharacterEncoding("UTF-8");25.26. //文件的上传部份27. boolean isMultipart = ServletFileUpload.isMultipartContent(request);28.29. if(isMultipart)30. {31. try {32. FileItemFactory factory = new DiskFileItemFactory();33. ServletFileUpload fileload = new ServletFileUpload(factory);34.35.// 设置最大文件尺寸,那个地址是4MB36. fileload.setSizeMax(4194304);37. List<FileItem> files = fileload.parseRequest(request);38. Iterator<FileItem> iterator = files.iterator();39. while(iterator.hasNext())40. {41. FileItem item = iterator.next();42. if(item.isFormField())43. {44. String name = item.getFieldName();45. String value = item.getString();46. System.out.println("表单域名为: " + name + "值为: " + value);47. }else48. {49. //取得取得文件名,此文件名包括途径50. String filename = item.getName();51. if(filename != null)52. {53. File file = new File(filename);54. //若是此文件存在55. if(file.exists()){56. File filetoserver = new File("d:\\upload\\",file.getName());57. item.write(filetoserver);58. System.out.println("文件 " + filetoserver.getName() + " 上传成功!!");59. }60. }61. }62. }63. } catch (Exception e) {64. System.out.println(e.getStackTrace());65. }66. }67. }68.}3.web.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app version="2.4"3. xmlns="java.sun/xml/ns/j2ee"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation="java.sun/xml/ns/j2ee6. java.sun/xml/ns/j2ee/web-app_2_4.xsd">7.8. <servlet>9. <servlet-name>UploadFileServlet</servlet-name>10. <servlet-class>11. org.chris.fileupload.FileUplaodServlet12. </servlet-class>13. </servlet>14.15. <servlet-mapping>16. <servlet-name>UploadFileServlet</servlet-name>17. <url-pattern>/UploadFile</url-pattern>18. </servlet-mapping>19.20. <welcome-file-list>21. <welcome-file>/Index.jsp</welcome-file>22. </welcome-file-list>23.24.</web-app>二.在strut1.2中实现1.上传页面file.jsp 清单如下:Java代码1.<%@ page language="java" pageEncoding="ISO-8859-1"%>2.<%@ taglib uri="/struts/tags-bean" prefix="bean"%>3.<%@ taglib uri="/struts/tags-html" prefix="html"%>4.5.<html>6. <head>7. <title>JSP for FileForm form</title>8. </head>9. <body>10. <html:form action="/file" enctype="multipart/form-data">11. <html:file property="file1"></html:file>12. <html:submit/><html:cancel/>13. </html:form>14. </body>15.</html>2.FileAtion.java的清单如下:Java代码1./*2. * Generated by MyEclipse Struts3. * Template path: templates/java/JavaClass.vtl4. */5.package action;6.7.import java.io.*;8.9.import javax.servlet.http.HttpServletRequest;10.import javax.servlet.http.HttpServletResponse;11.import org.apache.struts.action.Action;12.import org.apache.struts.action.ActionForm;13.import org.apache.struts.action.ActionForward;14.import org.apache.struts.action.ActionMapping;15.import org.apache.struts.upload.FormFile;16.17.import form.FileForm;18.19./**20. * @author Chris21. * Creation date: 6-27-202022. *23. * XDoclet definition:24. * @struts.action path="/file" name="fileForm" input="/file.jsp"25. */26.public class FileAction extends Action {27. /*28. * Generated Methods29. */30.31. /**32. * Method execute33. * @param mapping34. * @param form35. * @param request36. * @param response37. * @return ActionForward38. */39. public ActionForward execute(ActionMapping mapping, ActionForm form,40. HttpServletRequest request, HttpServletResponse response) {41. FileForm fileForm = (FileForm) form;42. FormFile file1=fileForm.getFile1();43. if(file1!=null){44. //上传途径45. String dir=request.getSession(true).getServletContext().getRealPath("/upload");46. OutputStream fos=null;47. try {48. fos=new FileOutputStream(dir+"/"+file1.getFileName());49. fos.write(file1.getFileData(),0,file1.getFileSize());50. fos.flush();51. } catch (Exception e) {52. // TODO Auto-generated catch block53. e.printStackTrace();54. }finally{55. try{56. fos.close();57. }catch(Exception e){}58. }59. }60. //页面跳转61. return mapping.findForward("success");62. }63.}3.FileForm.java的清单如下:Java代码1.package form;2.3.import javax.servlet.http.HttpServletRequest;4.import org.apache.struts.action.ActionErrors;5.import org.apache.struts.action.ActionForm;6.import org.apache.struts.action.ActionMapping;7.import org.apache.struts.upload.FormFile;8.9./**10. * @author Chris11. * Creation date: 6-27-202012. *13. * XDoclet definition:14. * @struts.form name="fileForm"15. */16.public class FileForm extends ActionForm {17. /*18. * Generated Methods19. */20. private FormFile file1;21. /**22. * Method validate23. * @param mapping24. * @param request25. * @return ActionErrors26. */27. public ActionErrors validate(ActionMapping mapping,28. HttpServletRequest request) {29. // TODO Auto-generated method stub30. return null;31. }32.33. /**34. * Method reset35. * @param mapping36. * @param request37. */38. public void reset(ActionMapping mapping, HttpServletRequest request) {39. // TODO Auto-generated method stub40. }41.42. public FormFile getFile1() {43. return file1;44. }45.46. public void setFile1(FormFile file1) {47. this.file1 = file1;48. }49.}4.struts-config.xml的清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "/d tds/struts-config_1_2.dtd">3.4.<struts-config>5. <data-sources />6. <form-beans >7. <form-bean name="fileForm" type="form.FileForm" />8.9. </form-beans>10.11. <global-exceptions />12. <global-forwards />13. <action-mappings >14. <action15. attribute="fileForm"16. input="/file.jsp"17. name="fileForm"18. path="/file"19. type="action.FileAction"20. validate="false">21. <forward name="success" path="/file.jsp"></forward>22. </action>23.24. </action-mappings>25.26. <message-resources parameter="ApplicationResources" />27.</struts-config>5.web.xml代码清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app xmlns="java.sun/xml/ns/j2ee" xmlns:xsi="w/2001/XMLSchema-instance" version="2.4" xsi:schemaLocatio n="java.sun/xml/ns/j2ee java.sun/xml/ns/j2ee/web-app_2_4.xsd">3. <servlet>4. <servlet-name>action</servlet-name>5. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>6. <init-param>7. <param-name>config</param-name>8. <param-value>/WEB-INF/struts-config.xml</param-value>9. </init-param>10. <init-param>11. <param-name>debug</param-name>12. <param-value>3</param-value>13. </init-param>14. <init-param>15. <param-name>detail</param-name>16. <param-value>3</param-value>17. </init-param>18. <load-on-startup>0</load-on-startup>19. </servlet>20. <servlet-mapping>21. <servlet-name>action</servlet-name>22. <url-pattern>*.do</url-pattern>23. </servlet-mapping>24.</web-app>三.在struts2中实现(以图片上传为例)1.FileUpload.jsp代码清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2.<%@ taglib prefix="s" uri="/struts-tags" %>3.<html>4. <head>5. <title>The FileUplaodDemo In Struts2</title>6. </head>7.8. <body>9. <s:form action="fileUpload.action" method="POST" enctype="multipart/form-data">10. <s:file name="myFile" label="MyFile" ></s:file>11. <s:textfield name="caption" label="Caption"></s:textfield>12. <s:submit label="提交"></s:submit>13. </s:form>14. </body>15.</html>2.ShowUpload.jsp的功能清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2.<%@ taglib prefix="s" uri="/struts-tags" %>3.<html>4. <head>5. <title>ShowUpload</title>6. </head>7.8. <body>9. <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >10. <img src ='UploadImages/<s:property value ="imageFileName"/> '/>11. <br />12. <s:property value ="caption"/>13. </div >14. </body>15.</html>3.FileUploadAction.java的代码清单如下:Java代码1.package com.chris;2.3.import java.io.*;4.import java.util.Date;5.6.import org.apache.struts2.ServletActionContext;7.8.9.import com.opensymphony.xwork2.ActionSupport;10.11.public class FileUploadAction extends ActionSupport{12.13. private static final long serialVersionUID = 572146812454l;14. private static final int BUFFER_SIZE = 16 * 1024 ;15.16. //注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定17. //因此同时要提供myFileContentType,myFileFileName的set方式18.19. private File myFile; //上传文件20. private String contentType;//上传文件类型21. private String fileName; //上传文件名22. private String imageFileName;23. private String caption;//文件说明,与页面属性绑定24.25. public void setMyFileContentType(String contentType) {26. System.out.println("contentType : " + contentType);27. this .contentType = contentType;28. }29.30. public void setMyFileFileName(String fileName) {31. System.out.println("FileName : " + fileName);32. this .fileName = fileName;33. }34.35. public void setMyFile(File myFile) {36. this .myFile = myFile;37. }38.39. public String getImageFileName() {40. return imageFileName;41. }42.43. public String getCaption() {44. return caption;45. }46.47. public void setCaption(String caption) {48. this .caption = caption;49. }50.51. private static void copy(File src, File dst) {52. try {53. InputStream in = null ;54. OutputStream out = null ;55. try {56. in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);57. out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);58. byte [] buffer = new byte [BUFFER_SIZE];59. while (in.read(buffer) > 0 ) {60. out.write(buffer);61. }62. } finally {63. if ( null != in) {64. in.close();65. }66. if ( null != out) {67. out.close();68. }69. }70. } catch (Exception e) {71. e.printStackTrace();72. }73. }74.75. private static String getExtention(String fileName) {76. int pos = stIndexOf(".");77. return fileName.substring(pos);78. }79.80.@Override81. public String execute() {82. imageFileName = new Date().getTime() + getExtention(fileName);83. File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages" ) + "/" + imageFileN ame);84. copy(myFile, imageFile);85. return SUCCESS;86. }87.}注:现在仅为方便实现Action因此继承ActionSupport,并Overrider execute()方式在struts2中任何一个POJO都能够作为Action4.struts.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC3. "-//Apache Software Foundation//DTD Struts Configuration2.0//EN"4. "/dtds/struts-2.0.dtd">5.<struts>6. <package name="example" namespace="/" extends="struts-default">7. <action name="fileUpload" class="com.chris.FileUploadAction">8. <interceptor-ref name="fileUploadStack"/>9. <result>/ShowUpload.jsp</result>10. </action>11. </package>12.</struts>5.web.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app version="2.4"3. xmlns="java.sun/xml/ns/j2ee"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation="java.sun/xml/ns/j2ee6. java.sun/xml/ns/j2ee/web-app_2_4.xsd">7. <filter >8. <filter-name > struts-cleanup </filter-name >9. <filter-class >10. org.apache.struts2.dispatcher.ActionContextCleanUp11. </filter-class >12. </filter >13. <filter-mapping >14. <filter-name > struts-cleanup </filter-name >15. <url-pattern > /* </url-pattern >16. </filter-mapping >17.18. <filter>19. <filter-name>struts2</filter-name>20. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>21. </filter>22. <filter-mapping>23. <filter-name>struts2</filter-name>24. <url-pattern>/*</url-pattern>25. </filter-mapping>26. <welcome-file-list>27. <welcome-file>Index.jsp</welcome-file>28. </welcome-file-list>29.30.</web-app>。

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

UploadExample.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<title><%= application.getServerInfo() %></title>
<body>
上传文件程序应用示例
<form action="doUpload.jsp" method="post" enctype="multipart/form-data">
<%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。

--%>
请选择要上传的文件<input type="file" name="upfile" size="50">
<input type="submit" value="提交">
</form>
</body>
</html>
doUpload.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<html><head><title>upFile</title></head>
<body bgcolor="#ffffff">
<%
//定义上载文件的最大字节
int MAX_SIZE = 102400 * 102400;
// 创建根路径的保存变量
String rootPath;
//声明文件读入类
DataInputStream in = null;
FileOutputStream fileOut = null;
//取得客户端的网络地址
String remoteAddr = request.getRemoteAddr();
//获得服务器的名字
String serverName = request.getServerName();
//取得互联网程序的绝对地址
String realPath = request.getRealPath(serverName);
realPath = realPath.substring(0,stIndexOf("\\"));
//创建文件的保存目录
rootPath = realPath + "\\upload\\";
//取得客户端上传的数据类型
String contentType = request.getContentType();
try{
if(contentType.indexOf("multipart/form-data") >= 0){
//读入上传的数据
in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
if(formDataLength > MAX_SIZE){
out.println("<P>上传的文件字节数不可以超过" + MAX_SIZE + "</p>"); return;
}
//保存上传文件的数据
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
//上传的数据保存在byte数组
while(totalBytesRead < formDataLength){
byteRead = in.read(dataBytes,totalBytesRead,formDataLength); totalBytesRead += byteRead;
}
//根据byte数组创建字符串
String file = new String(dataBytes);
//out.println(file);
//取得上传的数据的文件名
String saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0,saveFile.indexOf("\n"));
saveFile = saveFile.substring(stIndexOf("\\") + 1,saveFile.indexOf("\"")); int lastIndex = stIndexOf("=");
//取得数据的分隔字符串
String boundary = contentType.substring(lastIndex + 1,contentType.length());
//创建保存路径的文件名
String fileName = rootPath + saveFile;
//out.print(fileName);
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n",pos) + 1;
pos = file.indexOf("\n",pos) + 1;
pos = file.indexOf("\n",pos) + 1;
int boundaryLocation = file.indexOf(boundary,pos) - 4;
//out.println(boundaryLocation);
//取得文件数据的开始的位置
int startPos = ((file.substring(0,pos)).getBytes()).length;
//out.println(startPos);
//取得文件数据的结束的位置
int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length;
//out.println(endPos);
//检查上载文件是否存在
File checkFile = new File(fileName);
if(checkFile.exists()){
out.println("<p>" + saveFile + "文件已经存在.</p>");
}
//检查上载文件的目录是否存在
File fileDir = new File(rootPath);
if(!fileDir.exists()){
fileDir.mkdirs();
}
//创建文件的写出类
fileOut = new FileOutputStream(fileName);
//保存文件的数据
fileOut.write(dataBytes,startPos,(endPos - startPos));
fileOut.close();
out.println(saveFile + "文件成功上载.</p>");
}else{
String content = request.getContentType();
out.println("<p>上传的数据类型不是multipart/form-data</p>");
}
}catch(Exception ex){
throw new ServletException(ex.getMessage());
}
%>
</body>
</html>
运行方法,将这两个JSP文件放在同一路径下,运行UploadExample.jsp即可。

相关文档
最新文档