jsp中实现一个页面纯io流上传文件
JSP页面如何实现文件上传下载
JSP页面如何实现文件上传下载JSP页面如何实现文件上传下载Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
下面,店铺为大家搜索整理了JSP页面如何实现文件上传下载,希望能给大家带来帮助!名称:jsp页面上传类作者:SinNeRMail:vogoals[at]特点:可以多文件上传;返回上传后的文件名;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*************************** 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实用教程:文件的上传
<% SmartUpload su = new SmartUpload();
catch (Exception e){ %> <script language=javascript>
alert("只允许上传.jpg/.gif/.png/.bmp类型图片文件");
window.location='upload_image.html'; </script>
<%
su.initialize(pageContext); // 上传初始化
try{
// 设定允许上传的文件(通过扩展名限制)
su.setAllowedFilesList("jpg,png,gif,bmp");
su.upload(); // 上传文件 su.save(“/upload”); // 设置保存目录 }
上传文件处理页面:new_upload.jsp
文件上传成功 文件长度:28376 文件名:9.jpg 文件扩展名:jpg
文件上传页面:upload_new.html
<form method="post" action="new_upload.jsp" enctype="multipart/form-data" > <input type="file" name="file"> <input type="submit" name="Submit" value="上传"> </form> 知识点:表单中enctype=“multipart/form-data” 的意思,是设置表单的MIME编码。默认情况,这个编 码格式是application/x-www-form-urlencoded,不能用 于文件上传;只有设置为multipart/form-data,才能完 整的传递文件数据
用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 }。
用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的同志都在实现文件上传到服务器这方面不是很了解,今天在这里我会帮助大家慢慢的实现这一功能。
准备工作: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实现word文档的上传在线预览下载
JSP实现word文档的上传,在线预览,下载前两天帮同学实现在线预览word文档中的内容,而且需要提供可以下载的链接!在网上找了好久,都没有什么可行的方法,只得用最笨的方法来实现了。
希望得到各位大神的指教。
下面我就具体谈谈自己的实现过程,总结一下学习中的收获。
我相信很多程序员都遇到过,有些word文档希望直接在浏览器中打开进行预览,但是浏览器往往不是很配合,直接就提示下载,不像pdf文档,浏览器可以直接进行预览。
Word文档甚至始终都会通过本地的Office软件打开。
那么,问题来了,如何可以在线浏览word文档呢?其实,我在最初的时候也没有接触过这方面的东西,一般用的比较多的是生成pdf文档,而浏览器一般都支持pdf 的浏览,因此,直接通过后台传来的数据,再利用java和一些相关的jar包就可以生产一个pdf文档,在浏览器中可以直接显示。
尽管可以这样,但是我们需要的是解决实际问题啊?在浏览器中打开word文档。
在网上查了一些资料,也都没有查出个所以然。
看了好几个博客和论坛,也都是大同小异,测试了好几个,基本都是浏览器提示直接下载,或者打开,这里的打开也都是利用本地的Office软件打开的,所以这并不是自己想要的结果。
于是,自己动手,既然浏览器不支持显示word文档,我何不将word文档按照原来word的样式和内容转为html呢?而在浏览器中,html是再熟悉不过了。
基本思路就是这样,首先是利用上传的word文档转为html文件,然后生成的链接显示在jsp页面上,如果点击显示该word文档,那么实际上浏览器读取的是刚生成的html文件。
下面将自己的实现过程总结如下,欢迎各位朋友提供更好的解决办法。
转载本文请在文章明显位置标明文章的原始出处,个人博客: 邮箱:it_red@1. Word文档转为html这里采用第三方组件jacob来实现的,本demo所用的版本为jacob-1.18-M2;下载链接为:http://sourceforge.jp/projects/sfnet_jacob-project/releases/ 先在这里说一下,用这个组件还是比较麻烦的,首先要根据自己的电脑实际情况将压缩包里面的动态链接库放到多个目录下,而这个动态链接库为:将其复制的位置分别是:C:\Windows\System32机器所安装的java目录下的jdk下的bin中在myeclipse中指定jre然后就是编码阶段:导入相关的jar包,新建一个WordReader类,源码如下:package com.mh.test;import com.jacob.activeX.ActiveXComponent;import .Dispatch;import .Variant;public class WordReader {public static void extractDoc(String inputFIle, String outputFile) {boolean flag = false;// 打开Word应用程序ActiveXComponent app = new ActiveXComponent("Word.Application");try {// 设置word不可见app.setProperty("Visible", newVariant(false));// 打开word文件Dispatch doc1 =app.getProperty("Documents").toDispatch();Dispatch doc2 = Dispatch.invoke(doc1, "Open", Dispatch.Method, new Object[] {inputFIle, new Variant(false), newVariant(true)},new int[1]).toDispatch();// 作为html格式保存到临时文件::参数new Variant(8)其中8表示word转html;7表示word转txt;44表示Excel转html。
jsp实现文件上传以及类似百度文库在线阅读
Jsp实现类似百度文库的在线阅读1.首先下载FlashPaper2 并安装。
如果你的系统是win7的话还需要下载一个补丁安装。
关于FlashPaper2 的操作请参考下面的网址。
2.配置struts2的环境.将下面的架包拷贝到项目中。
3.编写上传文件界面。
代码如下:<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>UPLOAD</title></head><script type="text/javascript" src="js/wait.js"></script><body><s:form action="upload" method="post"enctype="multipart/form-data"><s:file name="file" label="file name:"></s:file><s:textfield name="name" label="new name:"></s:textfield> <s:submit label="ok" onClick="javascript:wait()" /></s:form></body></html>4.编写上后后跳转的页面。
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()此方法从该文件的当前文件指针开始读取第一个字节。
手把手教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页面实现文件上传下载第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<!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页面中利用jspSmartUpload组件实现文件上传的方法
JSP页面中利用jspSmartUpload组件实现文件上传的方法作者:宁云智裴来芝来源:《无线互联科技》2017年第24期摘要:利用网页上传文件的方法有很多种,利用第三方控件来完成是最方便的一种。
文章介绍在JSP页面利用jspSmartUpload组件实现文件的上传,首先要在服务器环境中安装和配置好组件,再创建上传表单页面,最后编写处理上传文件操作的代码。
关键词:JSP;jspSmartUpload组件;文件上传1 jspSmartUpload组件简介一个网站总是不可避免地要和用户进行信息的交互,如果只是将一些简单输入类型(例如:text,password,radio,checkbox,select等)的信息上传到服务器端,只要使用JSP的内置对象(如session)进行传递就可以了。
但是如果涉及用户和服务器之间的文件交换(包括上传和下载),仅使用session是不能实现的,必须借助于文件流读写的方式来实现。
但由于直接应用文件流读写比较复杂,加上在上传文件到服务器时必须使用multipart/form-data的编码方式,不能直接使用request.getParameter()来取得,因此,对于文件的上传和下载是借助于第三方的组件来完成的。
完成文件上传和下载的方法有很多种,例如jspsmart公司的jspSmartUpload组件,O`Reilly公司的cos组件,Jakarta Apache公司的commonsFileUpload组件,JavaZoom的uploadbean组件,以及Struts组件中自带的org.apache.struts.upload类工具等。
下面针对其中的3种常用的解决方案(jspSmartUpload、O`Reilly-cos、struts.upload)进行一个简单的介绍和对比,三者之间的比较如表1所示。
2 使用jspSmartUpload组件的服务器环境配置使用jspSmartUpload组件进行文件上传需要在服务器环境中安装和配置好组件,本文以Tomcat为例介绍其安装和配置方法。
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不使⽤第三⽅库,实现快速上传⽂件的功能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"> <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"> ⽂件</td><td align="left"> <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"> <input type="reset" value="重置" name="button3"></td></tr></tbody></table><p> <br><br> </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实现上传文件的两种方法以前用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/Servlet实现文件上传
[ 文献标识码 ]A [ 文章编号]17— 55 ( 0) 302—4 6383 2 7 0-07 0 0
文件上传在很多网站应用中是必不可少的,在 电子商务中上传商品图片 ,在音乐网站中上传流行 歌 曲……一个高效率的文件上传功能尤为重要 。笔 者 主要 介 绍 用 JP方 式 和 Srlt 式 实 现 的 两个 S eve 方 代码简短又高效率的文件上传功能 。在此基础上 , 可 以对文 件上传 功 能进行 进一 步 的完 善 ,如 限制上
1c” ; et
方法 生成 Srlt p tt a ev I uSr m类 的对象 ,即 I 中 的 en e / 0
输人流对象。sr e nu t a ev t pt r m类提供了 pbi i lI s e ul t cn
ra Ln (ye[ b ito , t e ) trw aa o ed ie b t 】 , n fi n ho s v . . nl j i
维普资讯
第 1 7卷
第3 期
梧 州 学 院 学 报
J U N L O WU H U U I E ST O R A F Z O N V R IY
No3 Vo . 7 - 11
20 0 7年 6月
J n2 0 u .0 7
用 JPSrl 实现 文件上传 S /eve t
④
第 一 行 是 “ onay ,表 示 数 据 开 始 ,第 二 budr”
行是对数据 内容的捕述 、 表单 中 fe i 控件 的名称以 l
・
2 ・ 7
维普资讯
2 0 年 第 3期 07
梧
州
学
院
学
报
第 1 7卷
及所 上 传 文件 的路 径 和文 件 名 ,第 三 行 是 文 件 类 型 ,第 四行 为一 空行 。从第 二行 数据 中取 出文件 扩 展 名后 ,可 以进行 上 传文件 类 型的控制 ,如 上传 图 片则 判 断 扩展 名 是 否 为 .f . g等格 式 ,上 传 音 g或J i P 频 文 件则 判 断扩 展 名 是 否为 .p m 3或 .m w a等 格 式 。 需 要注 意的 是 .如果 取 出的文 件路径 和 文件名 值 为
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中实现一个页面纯io流上传文件
jsp中实现一个页面纯io流上传文件<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@page import="java.io.*"%><%@page import="java.sql.*"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'Xs.jsp' starting page</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><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><%!//此方法用于将指定的文本转换成ISO-8859-1字符编码格式public String codeToString(String str) {String s = str;try {byte tempB[] = s.getBytes("ISO-8859-1");s = new String(tempB);return s;}catch (Exception e) {return s;}}%><%//声明一个临时文件名String tempFileName = new String("tempFileName1");//在D盘建立一个临时文件,名为tempFileNameFile tempFile1 = new File("D:/", tempFileName);//根据指定的这个临时文件,来创建一个文件字节输出流(用于向磁盘写文件)FileOutputStream outputFile1 = new FileOutputStream(tempFile1);//由返回一个文件字节输入流(用于读文件)InputStream fileSource1 = request.getInputStream();//实例一个字节数组初始为1000kbbyte b[] = new byte[1000];int n;//利用while循环,先读出这个文件大小,判断为不为-1,如果不为-1就输出数据,向磁盘写文件数据while ((n = fileSource1.read(b)) != -1) {outputFile1.write(b, 0, n); //将 n 个字节从b字节数组写入到outputFile1文件,偏移量从0开始}//关闭文件输出流outputFile1.close();//关闭文件输入流fileSource1.close();//实例化一个RandomAccessFile 对象.创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
jsp中实现一个页面纯io流上传文件<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@page import="java.io.*"%><%@page import="java.sql.*"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'Xs.jsp' starting page</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><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><%!//此方法用于将指定的文本转换成ISO-8859-1字符编码格式public String codeToString(String str) {String s = str;try {byte tempB[] = s.getBytes("ISO-8859-1");s = new String(tempB);return s;}catch (Exception e) {return s;}}%><%//声明一个临时文件名String tempFileName = new String("tempFileName1");//在D盘建立一个临时文件,名为tempFileNameFile tempFile1 = new File("D:/", tempFileName);//根据指定的这个临时文件,来创建一个文件字节输出流(用于向磁盘写文件)FileOutputStream outputFile1 = new FileOutputStream(tempFile1);//由返回一个文件字节输入流(用于读文件)InputStream fileSource1 = request.getInputStream();//实例一个字节数组初始为1000kbbyte b[] = new byte[1000];int n;//利用while循环,先读出这个文件大小,判断为不为-1,如果不为-1就输出数据,向磁盘写文件数据while ((n = fileSource1.read(b)) != -1) {outputFile1.write(b, 0, n); //将 n 个字节从b字节数组写入到outputFile1文件,偏移量从0开始}//关闭文件输出流outputFile1.close();//关闭文件输入流fileSource1.close();//实例化一个RandomAccessFile 对象.创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。
//将创建一个新的 FileDescriptor 对象来表示此文件的连接。
//mode 参数指定用以打开文件的访问模式。
允许的值及其含意为://"r" 以只读方式打开。
调用结果对象的任何 write 方法都将导致抛出 IOException。
//"rw" 打开以便读取和写入。
如果该文件尚不存在,则尝试创建该文件。
//"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到基础存储设备。
//"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到基础存储设备。
RandomAccessFile randomFile1 = new RandomAccessFile(tempFile1, "r");//读取文本的下一行randomFile1.readLine();//读取文本的下一行返回一个StringString FilePath = randomFile1.readLine();//对页面首次加载进行处理if(FilePath == null){FilePath = "";}else{//得到最后一次出现\\符号的索引位置int position = stIndexOf('\\');//将截取到的文本(position + 1, FilePath.length() - 1)转换成ISO-8859-1格式的字符串(得到文件的名字)String filename = codeToString(FilePath.substring(position + 1, FilePath.length() - 1));//设置randomFile1文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
randomFile1.seek(0);//设置一个向前键入的索引位置long forthEnterPosition = 0;//设置一个向前的索引位置int forth = 1;while ((n = randomFile1.readByte()) != -1 && (forth <= 4))if (n == '\n') {//向前键入的位置为文件中的当前偏移量。
forthEnterPosition = randomFile1.getFilePointer();forth++;}//由给定的虚拟路径返回一个真正的路径(这个虚拟路径由ServletContext.getRealPath("/")方法得到)相当于新建一个文件夹File FileUploadDir = new File(request.getSession().getServletContext().getRealPath("/"), "upLoadFile");//创建此抽象路径名指定的目录。
FileUploadDir.mkdir();//在这个路径下新建一个文件,文件名就是上面得到的文件名File saveFile1 = new File(request.getSession().getServletContext().getRealPath("/") + "upLoadFile/", filename);//创建从中读取和向其中写入(可选)的随机存取文件流,访问模式为可读可写RandomAccessFile randomFile2 = new RandomAccessFile(saveFile1, "rw");//设置randomFile2文件的偏移量为randomFile1的长度randomFile1.seek(randomFile1.length());//得到randomFile1的文件偏移量赋给endPositionlong endPosition = randomFile1.getFilePointer();int j = 1;while ((endPosition >= 0) && (j <= 4)) {endPosition--;randomFile1.seek(endPosition);if (randomFile1.readByte() == '\n')j++;}//重新设置randomFile1的文件偏移量randomFile1.seek(forthEnterPosition);//得到randomFile1的文件偏移量赋给startpointlong startPoint = randomFile1.getFilePointer();//如果开始索引处小于最后的索引处-1.因为最后一个是'\n',while (startPoint < endPosition - 1) {//就给randomFile2文件写入randomFile1的所有字节数据..就相当于复制randomFile2.write(randomFile1.readByte());//重新设置开始索引为randomFile1的文件偏移量startPoint = randomFile1.getFilePointer();}//关闭randomFile2randomFile2.close();//关闭randomFile1randomFile1.close();//删除临时文件tempFile1.delete();//提示xx文件上传成功out.print("文件:" + filename + " 上传成功!<br>");}%><form action="Xs.jsp" method=post enctype="multipart/form-data"> <input type="file" name="upfile" size="30"><br><input type="submit" name="submit" value="commit"></form></body></html>。