Jsp页面实现文件上传下载
Jsp页面实现文件上传下载
第1 页jsp页面实现文件上传
代码开发的过程见用TOMCAT作简单的jsp web开发
名称:jsp页面上传类
作者:SinNeR
Mail:vogoals[at]https://www.360docs.net/doc/9e4424615.html,
特点:
1可以多文件上传;
2返回上传后的文件名;
3form表单中的其他参数也可以得到。
先贴上传类,JspFileUpload
package 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@https://www.360docs.net/doc/9e4424615.html,
* by https://www.360docs.net/doc/9e4424615.html,
* mail: vogoals@https://www.360docs.net/doc/9e4424615.html,
*/
/**
* 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 */
* 设定request对象。
*
* @param request
* HttpServletRequest request对象
*/
public void setRequest(HttpServletRequest request) {
this.request = request;
}
/**
* 设定文件上传路径。
*
* @param path
* 用户指定的文件的上传路径。
*/
public void setUploadPath(String path) {
this.uploadPath = path;
}
/**
* 文件上传处理主程序。�������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 {
// ��参数或者文件名�u��
String name = null;
// 参数的value
String value = null;
// 读取的流是否为文件的标志位
boolean fileFlag = false;
// 要存储的文件。
File tmpFile = null;
// 上传的文件的名字
String fName = null;
FileOutputStream baos = null;
BufferedOutputStream bos = null;
// ��存储参数的Hashtable
paramHt = new Hashtable();
byte[] buffs = new byte[BUFSIZE * 8];
// �取得ContentType
String contentType = request.getContentType();
int index = contentType.indexOf("boundary=");
String boundary = "--" + contentType.substring(index + 9); String endBoundary = boundary + "--";
// �从request对象中取得流。
ServletInputStream sis = request.getInputStream();
// 读取1行
while ((rtnPos = sis.readLine(buffs, 0, buffs.length)) != -1) { String strBuff = new String(buffs, 0, rtnPos);
// 读取1行数据�n��
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);
"filename=\"");
if (fIndex != -1) {
fileFlag = true;
int fLastIndex = strBuff.toLowerCase().indexOf(
"\"", fIndex + 10);
fName = strBuff.substring(fIndex + 10, fLastIndex);
fName = getFileName(fName);
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);
}
} 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(name) == null )
return null;
ArrayList al = (ArrayList)paramHt.get(name);
String[] strArr = new String[al.size()];
for ( int i=0;i strArr[i] = (String)al.get(i); return strArr; } } public String[] getUpdFileNames(){ String[] strArr = new String[updFileArr.size()]; for ( int i=0;i strArr[i] = (String)updFileArr.get(i); return strArr; } private String getFileName(String input){ int fIndex = https://www.360docs.net/doc/9e4424615.html,stIndexOf("\\"); if (fIndex == -1) { fIndex = https://www.360docs.net/doc/9e4424615.html,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和不足。主要做了如下修正。 4用户可以设定文件上传的路径,这里没有用request对象的getRealPath方法来取得相对路径,而是用了绝对路径。是一个小败笔。因为有时候用户只是得到服务器的一个应用,而不知道整个服务器的路径。但是既然getRealPath自己可以得到,用户自己取得也可以。 5在文件上传处理的时候,预先进行了check,把一些可能出现的造成上传失败的情况拍查掉。 避免该类出现不该出现的异常。 6捕获了IO异常,避免文件上传的时候出现异常时程序的不友好表现 7提供了方法返回form表单中其他参数的取得,模拟了HttpServletRequest对象的getParameter 和getParameters方法(后面这个方法是叫这个名字么-_-b),取得Parameter的名称的方法没有提供,是个小缺陷。 8提供了方法返回上传的文件的件数和上传的文件名,方便用户作其他操作。 现在介绍下JSP页面中如何用这个类实现上传。 首先,要把这个类编译后的class文件拷贝到WEB-INF/classes/目录下。注意保持package的结构。在jsp页面中引用这个类 <%@page import="com.vogoal.util.JspFileUpload"%> <% //初始化 JspFileUpload jfu = new JspFileUpload(); //设定request对象 jfu.setUploadPath("C:\\"); //上传处理 int rtn = jfu.process(); //取得form中其他input控件参数的值 String username = jfu.getParameter("username"); //如果对应同一个参数有多个input控件,返回数组 String[] usernameArr = jfu.getParameters("username"); //取得上传的文件的名字 String[] fileArr = jfu.getUpdFileNames(); //取得上传文件的个数,这个方法有点鸡肋 int fileNumber = jfu.getUpdFileSize(); //下面的是测试输出的代码。 // out.println("parameter:" + username); //out.println("parameter size:" + usernameArr.length); //out.println("fileArr size:" + fileArr.length); // if (fileArr.length > 0) // out.println("fileArr 0:" + fileArr[0]); %> 使用的时候的注意事项: 9一定要设定request对象。 10一定要设定正确的上传路径。 11执行完了之后才可以得到其他参数,因为执行了之后这些参数才被分析。 1,2两点如果没有做到的话,process方法执行的时候汇报错。 各个用户可用的方法及说明: 设定requet对象。 public void setRequest(HttpServletRequest request) 设定文件上传的路径。 public void setUploadPath(String path) 文件上传处理主程序。 @return int 操作结果0 文件操作成功;1 request对象不存在。2 没有设定文件保存路径或者文件保存路径不正确;3 没有设定正确的enctype;4 文件操作异常。 public int process() 根据name取得form表单中其他传递的参数的值(多个的话返回其中一个) public String getParameter(String name) 根据name取得form表单中其他传递的参数的值(返回数组,可有多个) public String[] getParameters(String name) 取得上传成功文件的个数 public int getUpdFileSize() 取得上传的文件名对应的数组。 public String[] getUpdFileNames() 注意process方法地返回值,在不是0的情况下操作失败。 以下提供测试类以及测试页面(见附件): HelloPostFile.html HelloPostFileWithClass.html HelloPostFileWithClass.jsp 抽出class后的测试文件。 src在 WEB-INF/src/ class在 WEB-INF/classes/ 另: 由于这个文件被我在中文日文系统下编辑过,注释出现乱码,所以大部分都删掉了,见谅。原码:jspUpload 第2 页jsp页面实现文件下载 JSP文件下载类整理完成。可以在JSP页面中实现简单的下载,支持文件打包下载功能。支持将字符串或者流生成文件提供下载的功能。但是也有一些缺点。现把这个类的基本介绍总结如下。 名称:jsp页面下载类 作者:SinNeR Mail:vogoals[at]https://www.360docs.net/doc/9e4424615.html, 特点及功能介绍: 1支持单文件下载。支持多文件zip压缩下载。多文件zip压缩可在服务器保留或者删除副本。 支持将特定的字符串或者byte数组以指定的文件名提供下载。 2在下载过程中需要提供response对象。并且选择下载形式。 3下载处理前先进行check,避免出现错误。 4下载处理过程中出错时,会报告错误信息。 5日文系统下文件名是中文时出现乱码问题。 6处理前需要进行相对繁琐的设定。 现介绍下使用者可见的方法的功能。 设定实现下载必须的response对象。 public void setResponse(HttpServletResponse response) 设定下载方式:0 为普通单文件下载。 1 为多文件压缩成zip包下载。2 为将指定的字符串等拼接成文件内容提供给用户下载。 public void setDownType(int fileType) 设定下载时显示给用的文件名。 public void setDisFileName(String fileName) 压缩文件下载时,设定压缩文件暂时保存的路径(路径为绝对路径) public void setZipFilePath( String path ) 压缩文件下载时,设定服务器端生成的压缩文件是否删除。True 删除;false 保留。 public void setZipDelFlag(boolean b) 压缩文件下载时,设定要压缩的文件的文件路径(路径为绝对路径) public void setZipFileNames(String[] fileNames) 单文件下载时,设定下载文件的路径(绝对路径) public void setDownFileName(String fileName) 将字符串生成文件内容模拟下载时,设定文件的内容。参数为字符串(可多次调用) public int setFileContent(String fileContent) 将字符串生成文件内容模拟下载时,设定文件的内容。参数为byte数组(可多次调用) 返回值:0 操作正常;9 出现IO异常。 public int setFileContent(byte[] fileContent) 将字符串生成文件内容模拟下载时,调用此方法结束文件内容设定。 返回值:0 操作正常;9 出现IO异常。 public int setFileContentEnd() 主处理函数。 public int process() 现在介绍不同下载模式下的简单流程: 单文件下载流程: //实例初始化 JspFileDownload jfd = new JspFileDownload(); //设定response对象 jfd.setResponse(response); //设定文件下载模式0 单文件下载。 jfd.setDownType(0); //设定显示的文件名xxxx.xxx jfd.setDisFileName(filename); //设定要下载的文件的路径,绝对路径 jfd.setDownFileName(filePath); //主处理函数。注意处理返回值。 int result = jfd.process(); 多文件压缩成ZIP文件下载: //实例初始化 JspFileDownload jfd = new JspFileDownload(); //设定response对象。 jfd.setResponse(response); //设定下载模式1 多文件压缩成ZIP文件下载。 jfd.setDownType(1); //设定显示的文件名 jfd.setDisFileName(filename); //设定要下载的文件的路径(数组,绝对路径) jfd.setZipFileNames(fileNames); //设定服务器端生成的zip文件是否保留。true 删除false 保留,默认为false jfd.setZipDelFlag(true); //设定zip文件暂时保存的路径(是文件夹) jfd.setZipFilePath(zipfolder); //主处理函数注意返回值 Int result = jfd.process(); 将字符串生成为文件内容,模拟文件下载: //实例初始化 JspFileDownload jfd = new JspFileDownload(); //设定response对象。 jfd.setResponse(response); //设定下载模式2 将字符串作为文件内容,实现文件下载。 jfd.setDownType(2); //设定文件显示的名称。 jfd.setDisFileName(request.getParameter("filename")); //主处理函数,下载前check,注意返回值 out.print(jfd.process()); //设定要写入文件的内容,参数可为字符串或者byte数组。可多次调用。 jfd.setFileContent(request.getParameter("name")); //文件内容设定完了,调用函数。 文,英文太差-_-b。多包涵。 package com.vogoal.util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletResponse; /* * vogoalAPI 1.0 * Auther SinNeR@https://www.360docs.net/doc/9e4424615.html, * by https://www.360docs.net/doc/9e4424615.html, * mail: vogoals@https://www.360docs.net/doc/9e4424615.html, */ /** * JSP FILE DOWNLOAD SUPPORT * * @author SinNeR * @version 1.0 */ public class JspFileDownload { /** request object */ private HttpServletResponse response = null; /** file type: -1 un-setting; 0 normal file; 1 zip file ;2 stream*/ private int fileType = -1; /** file name to be displayed */ private String disFileName = null; /** zip file path */ private String zipFilePath = null; /** file to be zipped */ private String[] zipFileNames = null; private boolean zipDelFlag = false; /** file to be downloaded */ private String downFileName = null; /** error code 0 */ private static final int PROCESS_OK = 0; /** error code 2 */ private static final int UNSET_DOWNLOADTYPE = 2; /** error code 3 */ private static final int UNSET_DIS_FILE_NAME = 3; /** error code 4 */ private static final int UNSET_DOWN_FILE_NAME = 4; /** error code 9 */ private static final int IO_EXCEPTION = 9; /** * set response object * @param response response Object */ public void setResponse(HttpServletResponse response){ this.response = response; } /** * set file type 0 normal file; 1 zip file ;2 stream * @param fileType */ public void setDownType(int fileType){ this.fileType = fileType; } /** * set display file name * @param fileName */ public void setDisFileName(String fileName){ this.disFileName = fileName; } /** * set zip file path * @param fileNames */ public void setZipFilePath( String path ){ this.zipFilePath = path; } public void setZipDelFlag(boolean b){ /** * set zip file names * @param fileNames */ public void setZipFileNames(String[] fileNames){ this.zipFileNames = fileNames; } /** * set download file name * @param fileName */ public void setDownFileName(String fileName){ this.downFileName = fileName; } /** * set file content * @param fileContent */ public int setFileContent(String fileContent){ try{ byte[] buffs = fileContent.getBytes("UTF-8"); response.getOutputStream().write(buffs); }catch(IOException e){ return IO_EXCEPTION; } return PROCESS_OK; } /** * set file content * @param fileContent */ public int setFileContent(byte[] fileContent){ try{ response.getOutputStream().write(fileContent); }catch(IOException e){ return IO_EXCEPTION; } return PROCESS_OK; } /** * set file content end public int setFileContentEnd(){ try{ response.getOutputStream().close(); }catch(IOException e){ return IO_EXCEPTION; } return PROCESS_OK; } /** * main process * @return */ public int process(){ int status = PROCESS_OK; status = preCheck(); if ( status != PROCESS_OK ) return status; String fileName = disFileName; response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\""); int BUFSIZE = 1024 * 8; int rtnPos = 0; byte[] buffs = new byte[ BUFSIZE ]; FileInputStream inStream = null; ZipOutputStream zos = null; InputStream is = null; String filepath = null; try{ if ( fileType == 0 || fileType == 1){ if ( fileType == 0 ){ filepath = downFileName; }else{ filepath = zipFilePath + fileName; String[] fileToZip = zipFileNames; zos=new ZipOutputStream(new FileOutputStream(filepath)); ZipEntry ze=null; byte[] buf=new byte[BUFSIZE]; int readLen=0; for (int i= 0;i File f= new File(fileToZip[i]); ze.setSize(f.length()); ze.setTime(https://www.360docs.net/doc/9e4424615.html,stModified()); zos.putNextEntry(ze); is=new BufferedInputStream(new FileInputStream(f)); while ((readLen=is.read(buf, 0, BUFSIZE))!=-1) { zos.write(buf, 0, readLen); } is.close(); } zos.close(); } inStream =new FileInputStream(filepath); while((rtnPos=inStream.read(buffs)) >0) response.getOutputStream().write(buffs,0,rtnPos); response.getOutputStream().close(); inStream.close(); } if ( zipDelFlag ){ File fToDel = new File(filepath); fToDel.delete(); } }catch(IOException e){ return IO_EXCEPTION; }finally{ try{ if ( inStream != null ){ inStream.close(); inStream = null; } if ( zos != null ){ zos.close(); zos = null; } if ( is != null ){ is.close(); is = null; } }catch (IOException e){ } } return status; } * @return */ private int preCheck(){ if ( response == null ) return RESPONSE_IS_NULL; if ( disFileName == null || disFileName.trim().length() == 0 ) return UNSET_DIS_FILE_NAME; if ( fileType == -1 ) return UNSET_DOWNLOADTYPE; else if ( fileType == 0 ){ if ( downFileName == null || downFileName.trim().length() == 0 ) return UNSET_DOWN_FILE_NAME; else{ if ( !isFile( downFileName ) ) return UNSET_DOWN_FILE_NAME; } }else if ( fileType == 1 ){ if ( zipFilePath == null || zipFilePath.length() == 0 ) return UNSET_DOWN_FILE_NAME; else{ if ( !isDirect(zipFilePath) ) return UNSET_DOWN_FILE_NAME; } if ( zipFileNames == null || zipFileNames.length == 0 ) return UNSET_DOWN_FILE_NAME; else{ for ( int i=0;i if ( zipFileNames[i] == null || zipFileNames[i].trim().length() == 0 ) return UNSET_DOWN_FILE_NAME; else{ if ( !isFile( zipFileNames[i] ) ) return UNSET_DOWN_FILE_NAME; } } } }else if ( fileType == 2 ){ //doing nothing }else{ return UNSET_DOWNLOADTYPE; } return PROCESS_OK; } if (!f.exists() || !f.isFile()) return false; return true; } private boolean isDirect(String filePath){ File f = new File(filePath); if (!f.exists() || !f.isDirectory()) return false; return true; } } 至此,jsp页面文件下载介绍完成。 使用的时候,把这个类生成的class文件拷贝到WEB-INF/classes下。(注意保持包的路径)然后在使用的页面import进这个class即可。 <%@ page contentType="text/html;charset=GBK"%> 注意: 可能存在编码方式的问题,如果出现或者有别的bug请联系我,我来debug。 附件为这个类的source以及测试程序。 附件说明: 7单文件下载测试程序 请求页面:downloadSimpleFile.html 下载功能实现页面:downloadSimpleFile.jsp 8多文件压缩成zip文件下载的测试程序 请求页面:downloadZipFile.html 下载功能实现页面:downloadZipFile.jsp 9字符串生成文件内容模拟文件下载的测试程序。 请求页面:downloadStreamFile.html 下载功能实现页面:downloadStreamFile.jsp 10Source及class文件。 Source WEB-INF/src/com/vogoal/util/ JspFileDownload.java Class文件WEB-INF/classes/com/vogoal/util/ JspFileDownload.class 原码:jspDownload jsp中实现一个页面纯io流上传文件 <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@page import="java.io.*"%> <%@page import="java.sql.*"%> 将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。 所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用commons-io-1.3.2.jar)在WEB-INF\lib下。 此文作示例工程可在文章最后的附件中下载。 示例1 最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString ()得到表单数据内容,isFormField()可判断是否为普通的表单项。 demo1.html 特点: 1.可以多文件上传; 2.返回上传后的文件名; 3.form表单中的其他参数也可以得到。先贴上传类,JspFileUpload package 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@https://www.360docs.net/doc/9e4424615.html, * by https://www.360docs.net/doc/9e4424615.html, * mail: vogoals@hotm https://www.360docs.net/doc/9e4424615.html, */ /** * 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; } /** * 文件上传处理主程序。 �������B * * @return int 操作结果0 文件操作成功;1 request对象不存在。2 没有设定文件保存路径或者 现在想写个程序 向数据库中插入图片路径(或则插入图片也可以) 最好是插入图片的路径这样可插入任意大的图片... 请高手指点一下思路.. 感激不尽 1.通过显示层向数据库中插入图片 2.在界面显示的时候是小图片(缩小过的) 3.当点击查看大图片会显示图片(原来的大小) 提供给你图片上传和显示的代码吧!希望对你有帮助 我在程序代码里贴了向Mysql数据库写入image代码的程序,可是好多人都是Java的初学者,对于这段代码,他们无法将它转换成jsp,所以我在这在写一下用jsp怎样向数据库写入图像文件。大家先在数据库建这样一张表,我下面的这些代码对任何数据库都通用,只要支持blob类型的 只要大家将连接数据库的参数改一下就可以了。 SQL> create table image(id int,content varchar(200),image blob); 如果在sqlserver2000的数据库中,可以将blob字段换为image类型,这在SqlServer2000中是新增的。 testimage.html文件内容如下: package com.lsl.util; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * * @author Administrator * 图像处理类 */ public class PicCompression { /** * 压缩图片方法 * * @param oldFile * 将要压缩的图片的绝对地址 * @param width * 压缩宽 * @param height * 压缩长 * @param quality * 压缩清晰度建议为1.0 * @param smallIcon * 压缩图片后,添加的扩展名 * @return */ public String zoom(String oldFile, int width, int height, float quality) { if (oldFile == null) { return null; } String newImage = null; try { File file = new File(oldFile); upfile.jsp jsp中实现一个页面纯io流上传文件
Apache FileUpload 四种方式实现文件上传
jsp实现文件上传和下载(代码及说明)
JSP上传图片到数据库的例子
jsp 图片上传功能实现原创
JSP中上传图片 完整代码
<%@ page language="java" pageEncoding="gb2312"%> <%@ page import="java.io.*,java.awt.image.*,com.sun.image.codec.jpeg.*,jav a.sql.*,com.jspsmart.upload.*,java.util.*"%> <%@ page import="mainClass.*"%>
JSP文件上传-二进制流详解
JSP文件上传 一、先做选择上传文件页面chose.jsp,比较简单。 代码如下: 关键代码是:
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.*"%>
jsp多文件上传到数据库
数据库的创建: 数据库名叫:csdn 表名:savepicture DROP TABLE IF EXISTS `savepicture`; CREA TE TABLE `savepicture` ( `id` int(10) NOT NULL auto_increment, `picture` blob NOT NULL, PRIMARY KEY(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 好动手创建工程啦: 其实非常简单,一看就明白。把需要的包该导的都导了就行了。接着我们创建上传页面: <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%>
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文件。 下面将自己的实现过程总结如下,欢迎各位朋友提供更好的解决办法。转载本文请在文章明显位置标明文章的原始出处,个人博客:https://www.360docs.net/doc/9e4424615.html, 邮箱: it_red@https://www.360docs.net/doc/9e4424615.html, 1. Word文档转为html 这里采用第三方组件jacob来实现的,本demo所用的版本为jacob-1.18-M2;下载链接为: http://sourceforge.jp/projects/sfnet_jacob-project/releases/ 先在这里说一下,用这个组件还是比较麻烦的,首先要根据自己的电脑实际情况将压缩包里面的动态链接库 放到多个目录下,而这个动态链接库为: 将其复制的位置分别是: C:\Windows\System32 机器所安装的java目录下的jdk下的bin中
ssh框架中jsp上传图片功能的实现
jspsmart的使用 上传 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始化 su.initialize(pageContext); // 限制每个上传文件的最大长度。 su.setMaxFileSize(10000); // 限制总上传数据的长度。 su.setTotalMaxFileSize(20000); // 设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。 su.setAllowedFilesList("doc,txt"); // 设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat, //jsp,htm,html扩展名的文件和没有扩展名的文件。 su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); // 上传文件 su.upload(); // 将上传文件全部保存到指定目录 int count = su.save("/upload"); 下载 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 初始化 su.initialize(pageContext); // 设定contentDisposition为null以禁止浏览器自动打开文件, //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 //doc时,浏览器将自动用word打开它。扩展名为pdf时, //浏览器将用acrobat打开。 su.setContentDisposition(null); // 下载文件 su.downloadFile("/upload/test.doc"); 应用实例: uploadimage.jsp <%@ page contentType="text/html;charset=gb2312" language="java" import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,java.sql.*,com.js psmart.upload.*,java.util.*"%> <%
JSP案例开发集锦
第一章:JSP与HTML 案例1:动态设置网员背景图片 案例2:用JSP定制主页 案例3:表格应用实例 案例4:网页中文乱码问题的解决方案 案例5:JSP与CSS结合应用 第二章:JSP与字符串 案例1:显示不同大小的“你好Jsp”字符串中文的问题案例2:JSP中对字符串的处理及其扩展 案例3:实现文本模糊查找 案例4:JSP汉字转码 案例5:设置JSP异常处理 案例6:分割字符串 案例7:清除字符串中指定的字符 案例8:如何取得汉字的区位码 案例9:字符串中包含双引号 第三章:JSP与图像 案例1:JSP生成jpeg图片用于投票 案例2:记数器的实现 案例3:JSP中定义函数实现特例 第四章:JSP与数据库 案例1:基本的数据库连接实例 案例2:JDBC 实例 案例3:数据库访问JavaBean 实例 案例4:单记录浏览数据 案例5:分页显示 案例6:编程实现记录编辑 案例7:创建数据报表 案例8:系统登录系统 案例9:SQL创建和修改数据库 案例10:图形显示数据库表中的数据信息 案例11:将图片添加到数据中 案例12:定制标签实例 案例13:扩展标签实例 案例14:综合实例――学生管理系统 第五章:JSP与EJB 案例1:封装数据源 案例2:Enterprise JavaBeans的处理文件 案例3:实现EJBObject文件 案例4:实现EJBHome文件 案例5:一个javabean轻松实现数据库操作 案例6:在电子商务中的应用 案例7:动态日历 案例8:DIR计算器 第六章:JSP与Web
案例1:Telnet 服务 案例2:SMTP 服务 案例3:FTP 服务 案例4:News 服务 案例5:查询主机和本机的IP 案例6:环境列表 案例7:JavaMail API发送电子邮件 案例8:jspSmartUpload上传下载全攻略 案例9:留言本程序 案例10:聊天室程序 案例11:浏览器程序 第七章:JSP与XML 案例1:XML简单示例 案例2:Tag Library 开发与应用实例 案例3:JSP与Tag Library和XML的结台应用案例4:投票器 案例5:jsp操作Execl分析 第八章:JSP与JavaScript的结台应用 案例1:文件的读取 案例2:获取文件或文件夹属性 案例3:显示盘中所有的目录 案例4:用JSP实现文件查找功能 案例5:实现目录遍历 案例6:文件管理器 案例7:记事本 案例8:中文显示服务端日期 案例9:判断服务端时间并显示中文问候 案例10:打印文件 第九章:JSP综合实例 综合实例1:论坛和社区 综合实例2:酒店管理系统 综合实例3:搜索引擎 综合实例4:购物车 综合实例5:后台管理系统 综合实例6:新闻发布系统 综合实例7:网络考试
jspSmartUpload使用文档
一、安装篇 jspSmartUpload是由https://www.360docs.net/doc/9e4424615.html,网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点: 1、使用简单。在JSP文件中仅仅书写三五行JAVA代码就可以搞定文件的上传或下载,方便。 2、能全程控制上传。利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。 3、能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件。 4、下载灵活。仅写两行代码,就能把Web服务器变成文件服务器。不管文件在Web服务器的目录下或在其它任何目录下,都可以利用jspSmartUpload进行下载。 5、能将文件上传到数据库中,也能将数据库中的数据下载下来。这种功能针对的是MYSQL 数据库,因为不具有通用性,所以本文不准备举例介绍这种用法。 jspSmartUpload组件可以从https://www.360docs.net/doc/9e4424615.html,网站上自由下载,压缩包的名字是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目录下。2.运行JAR打包命令:jar cvf jspSmartUpload.jar com (也可以打开资源管理器,切换到当前目录,用WinZip将com目录下的所有文件压缩成jspSmartUpload.zip,然后将jspSmartUpload.zip换名为jspSmartUpload.jar文件即可。) 3.将jspSmartUpload.jar拷贝到Tomcat的shared/lib目录下。 二、相关类说明篇 ㈠File类 这个类包装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息。
jsp实现文件上传和下载
1 JSP文件上传简单实例 1、index.html代码:
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。JavaBean 通过ServletRequest类的getInputStream()方法获得一个客户端向服务器发出的数据流、分析上传的文件格式,根据分析结果将多个文件依次输出服务器端的目标文件中。 2.采用FTP协议实现多个文件的上传 FTP协议是Internet上用来传送文件的协议,规定了Internet上文件互相传送的标准。在Java中实现这一功能是借助FtpClient类完成的。具体实现过程:首先与FTP服务器建立连接。然后初始化文件的传输方式,包括ASCII和BINARY两种方
JAVA中的文件上传
SmartUpload上传图片 目标:在Jsp页面中实现文件上传 初级篇 文件上传是我们程序中会经常使用到的功能,针对于上传的技术也非常多!那么在此介绍两种常用简单的上传方式 上传方式一:使用SmartUpload组建进行上传 上传方式二:使用Struts的
下面是doUpload.jsp页面中的源代码 <%@page language="java"import="java.util.*"pageEncoding="GBK"%> <%@page import="com.jspsmart.upload.File"%> <%@page import="com.jspsmart.upload.Files"%> <%@page import="com.jspsmart.upload.SmartUpload"%> <% //实例化上传组件 SmartUpload upload=new SmartUpload(); //初始化上传组件 upload.initialize(this.getServletConfig(),request,response); //开始上传 upload.upload(); //获取上传的文件列表对象 Files f=upload.getFiles(); //获取文件对象 File fil=f.getFile(0); //去的文件后缀 String ext=fil.getFileExt(); //判断文件类型是否是jpg格式 if(!(ext.equals("jpg"))){ out .println(""); return; } //满足条件进行文件的上传需要注意的是upload使我们webRoot文件夹下的一个目录 fil.saveAs("upload/"+fil.getFileName()); %> 至此我们就完成了一个最简单的图片上传示例。我们部署测试下! 文件上传页面 我们选择一个视频文件