jsp中的jspsmartupload下载文件上传问题

jsp--upload jsp实现文件上传,主要用于 通过 Button control 按钮控件 249万源代码下载-
&文件名称: jsp--upload& & [
& & & & &&]
&&所属分类:
&&开发工具: Java
&&文件大小: 703 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:jsp实现文件上传,主要用于文件上传,通过jsp实现文件上传-jsp file upload, mainly for file upload, file upload via jsp
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&jsp--upload\.classpath&&...........\.mymetadata&&...........\.myumldata&&...........\.project&&...........\.settings\.jsdtscope&&...........\.........\org.eclipse.core.resources.prefs&&...........\.........\org.eclipse.jdt.core.prefs&&...........\.........\org.eclipse.wst.jsdt.ui.superType.container&&...........\.........\org.eclipse.wst.jsdt.ui.superType.name&&...........\src\simon\BaseDao.java&&...........\...\.....\MyFile.java&&...........\...\.....\MyPathUtil.java&&...........\...\.....\UploadDao.java&&...........\upload.sql&&...........\WebRoot\css\styles.css&&...........\.......\doupload.jsp&&...........\.......\download.jsp&&...........\.......\login.html&&...........\.......\META-INF\MANIFEST.MF&&...........\.......\register.htm&&...........\.......\register_new_user.jsp&&...........\.......\showall.jsp&&...........\.......\upload.jsp&&...........\.......\WEB-INF\classes\simon\BaseDao.class&&...........\.......\.......\.......\.....\MyFile.class&&...........\.......\.......\.......\.....\MyPathUtil.class&&...........\.......\.......\.......\.....\UploadDao.class&&...........\.......\.......\lib\jspSmartUpload.jar&&...........\.......\.......\...\mysql-connector-java-5.1.8.jar&&...........\.......\.......\web.xml&&...........\.......\.......\classes\simon&&...........\.......\.......\classes&&...........\.......\.......\lib&&...........\src\simon&&...........\WebRoot\css&&...........\.......\META-INF&&...........\.......\upload&&...........\.......\WEB-INF&&...........\.myeclipse&&...........\.settings&&...........\src&&...........\WebRoot&&jsp--upload
&输入关键字,在本站249万海量源码库中尽情搜索:下次自动登录
现在的位置:
& 综合 & 正文
JSP 文件上传组件commons-fileupload
应用第三方的开源组件实现文件上传,目前比较常用的上传组件是jspSmartUpload和commons-fileupload。应用它们可以不必编写大量的,只需要简单地调用即可,具体的业务实现在组件中完成。这里仅介绍commons-fileupload的实现文件上传详解。
1.commons-fileupload组件介绍
commons-fileupload组件是apache的一个开源项目,该组件很好地处理处理了中文。即可应用该组件上传文件不会出现中文乱码问题,是目前应用最广泛的开源组件,该组件包文件commons-fileupload-1.2.2.jar可到apache官网上下载,一定要注意这个组件需要commons-io-2.1.jar组件支持。
2.commons-fileupload组件核心类
DiskFileUpload类
DiskFileUpload类是Apache文件上传组件的核心类,应用开发人员通过这个类来与Apache文件上传组件进行交互。但现在Apache建议使用ServletFileUpload类,两个类的方法类似。下面介绍DiskFileUpload类中的几个常用的重要方法。
2.1.1 setSizeMax方法
setSizeMax方法用于设置请求消息实体内容的最大允许大小,以防止客户端故意通过上传特大的文件来塞满服务器端的存储空间,单位为字节。其完整语法定义如下:
public void setSizeMax(long sizeMax)
如果请求消息中的实体内容的大小超过了setSizeMax方法的设置值,该方法将会抛出FileUploadException异常。
setSizeThreshold方法
Apache文件上传组件在解析和处理上传数据中的每个字段内容时,需要临时保存解析出的数据。因为Java虚拟机默认可以使用的内存空间是有限的(笔者测试不大于100M),超出限制时将会发生“java.lang.OutOfMemoryError”错误,如果上传的文件很大,例如上传800M的文件,在内存中将无法保存该文件内容,Apache文件上传组件将用临时文件来保存这些数据;但如果上传的文件很小,例如上传600个字节的文件,显然将其直接保存在内存中更加有效。setSizeThreshold方法用于设置是否使用临时文件保存解析出的数据的那个临界值,该方法传入的参数的单位是字节。其完整语法定义如下:
public void setSizeThreshold(int sizeThreshold)
2.1.3. setRepositoryPath方法
setRepositoryPath方法用于设置setSizeThreshold方法中提到的临时文件的存放目录,这里要求使用绝对路径。其完整语法定义如下:
public void setRepositoryPath(String repositoryPath)
如果不设置存放路径,那么临时文件将被储存在"java.io.tmpdir"这个JVM环境属性所指定的目录中,tomcat 5.5.9将这个属性设置为了“&tomcat安装目录&/temp/”目录。
parseRequest方法
parseRequest 方法是DiskFileUpload类的重要方法,它是对HTTP请求消息进行解析的入口方法,如果请求消息中的实体内容的类型不是“multipart/form-data”,该方法将抛出FileUploadException异常。parseRequest 方法解析出FORM表单中的每个字段的数据,并将它们分别包装成独立的FileItem对象,然后将这些FileItem对象加入进一个List类型的集合对象中返回。parseRequest 方法的完整语法定义如下:
public List parseRequest(HttpServletRequest req)
parseRequest 方法还有一个重载方法,该方法集中处理上述所有方法的功能,其完整语法定义如下:
parseRequest(HttpServletRequest req,int sizeThreshold,long sizeMax, String path)
这两个parseRequest方法都会抛出FileUploadException异常。
2.1.5. isMultipartContent方法
isMultipartContent方法方法用于判断请求消息中的内容是否是“multipart/form-data”类型,是则返回true,否则返回false。isMultipartContent方法是一个静态方法,不用创建DiskFileUpload类的实例对象即可被调用,其完整语法定义如下:
public static final boolean isMultipartContent(HttpServletRequest req)
2.1.6. setHeaderEncoding方法
由于浏览器在提交FORM表单时,会将普通表单中填写的文本内容传递给服务器,对于文件上传字段,除了传递原始的文件内容外,还要传递其文件路径名等信息,如后面的图1.3所示。不管FORM表单采用的是“application/x-www-form-urlencoded”编码,还是“multipart/form-data”编码,它们仅仅是将各个FORM表单字段元素内容组织到一起的一种格式,而这些内容又是由某种字符集编码来表示的。关于浏览器采用何种字符集来编码FORM表单字段中的内容,请参看笔者编著的《深入体验java
Web开发内幕——核心基础》一书中的第6.9.2的讲解,“multipart/form-data”类型的表单为表单字段内容选择字符集编码的原理和方式与“application/x-www-form-urlencoded”类型的表单是相同的。FORM表单中填写的文本内容和文件上传字段中的文件路径名在内存中就是它们的某种字符集编码的字节数组形式,Apache文件上传组件在读取这些内容时,必须知道它们所采用的字符集编码,才能将它们转换成正确的字符文本返回。
对于浏览器上传给WEB服务器的各个表单字段的描述头内容,Apache文件上传组件都需要将它们转换成字符串形式返回,setHeaderEncoding 方法用于设置转换时所使用的字符集编码,其原理与笔者编著的《深入体验java Web开发内幕——核心基础》一书中的第6.9.4节讲解的ServletRequest.setCharacterEncoding方法相同。setHeaderEncoding 方法的完整语法定义如下:
public void setHeaderEncoding(String encoding)
其中,encoding参数用于指定将各个表单字段的描述头内容转换成字符串时所使用的字符集编码。
注意:如果在使用Apache文件上传组件时遇到了中文字符的乱码问题,一般都是没有正确调用setHeaderEncoding方法的原因。
&&&&推荐文章:
【上篇】【下篇】JSP+JSPSmartUpload 文件上传后没有上传到指定目录下_百度知道
JSP+JSPSmartUpload 文件上传后没有上传到指定目录下
TODO Auto-generated method stub
SmartUpload su=new SmartUpload():&#92..tmp1&#92.printStackTrace();upload(在不成功的时候,然后上传就成功了;;
su.save(&quot.out:\workspace\ch1&#92.
if(count&gt.plugins&#92,但有时不行;.initialize(servletconfig.setDeniedFilesList(&quot.setAllowedFilesList(&quot,exe,在这个目录下是没有upload文件夹的;workspace&#92.printStackTrace(),html, response).jsp中的一个表单上传选择文件后;
su,可不知道为什么;workspace&#92,htm&&#47:&#92.server.wst.setMaxFileSize(100000);upload下的吗.printStackTrace(),然后,新建它就能成功了)我度娘了下;tmp1\
} catch (SQLException e) {
&#47.setTotalMaxFileSize(200000);
su?还有这是为什么啊.plugins\&#47,有时好像我在D; TODO Auto-generated catch block
} }}由doc?上传的路径这样写不是直接放在D;/),txt&/
int count=su,不知道为什么;Eclipse\);WebContent下新建upload文件夹再运行.println(&)!&
TODO Auto-generated catch block
e;wtpwebapps&#92,bat,jsp.upload(),有时候能成功;workspace\),Eclipse退出来,我是想把上传的文件保存到根目录ch1下的upload文件下的,有时候不能成功(成功之后我把upload删除了; TODO Auto-generated catch block
e;succeed?结果查到是D;
} catch (SmartUploadException e) {
/upload自动创建一个upload文件夹;/ch1&#92.jsp好像可以自动在D.core&#92.metadata\Eclipse\upload&/0){Sch1\成功后再跳转这里未写}
} catch (SmartUploadException e) {
/wtpwebapps&#92,action指向该ch1&#92,再新建upload文件夹后再试又不成功了),然后成功的时候我去查了下上传文件在哪, IOException {
/Eclipse&#92,知道这是Eclipse工作的缓存工作区:\org.eclipse.core\/WebContent&#92?怎么跑到这个莫名其妙的地方了protected void doPost(HttpServletRequest request.metadata&#92, HttpServletResponse response) throws ServletEEclipse&#92
提问者采纳
getClassLoader().getResource(&quot.plugins&#92。当你在工程中创建upload后,ch1应该是你的工程的名字,则应用默认部署在workspace&#92.eclipse。可以在上传之前判断下目录是否存在;.substring(6) + &,刷新工程可以直接在workspace&#92,可以把应用直接部署到tomcat的webapps目录下,有时候不能成功!f.save(savePath);;ch1下生成相同的目录:如果使用eclipse运行应用;upload下的吗;tmp1\wtpwebapps&#92、上传有时候能成功;这个目录里。至于上传失败;&&#471.toString();upload下;;tmp1&#92.exists()) {)。2.plugins&#92:String savePath = getClass();if (.wst.wst.eclipse.metadata\wtpwebapps&#92.core&#92,SmartUpload的save方法是相对于工程根目录而言;?如果想把文件上传到WebContent&#92、上传的路径这样写不是直接放在WebContent\/upload&quot,应该是由于目录不存在的原因.metadata&#92.server.mkdirs()}int count=su.core&#92.server,试试这种写法;File f = new File(savePath)
1.这里的根目录不是应该是web工程的根目录(\ch1)吗?2.我在Eclipse下WebContent下创建文件夹upload后刷新,那个目录不会生成,之前成功的那几次我都不知道是什么情况下才成功的,3.应用是在Eclipse下创建的,它创建后都是在Eclipse的工作工程下的啊4.最后还是保存在D:....\.metadata\.....\ch1\WEB-INF\classes\upload
1、按理说根目录应该是ch1,但实际上eclipse是把WebContent中的内容全部拷贝到工作空间,所以WebContent是真正意义上的根目录2、如果刷新的时候不自动生成,可以试试直接运行或者重新部署3、你说的没错4、抱歉,写的不对,这样:String savePath = request.getRealPath(&/&) + &/upload&;
还是放在.metadata\...这个文件下,好像是因为servlet编译成class文件后,在Eclipse下class文件就是放在.metadata....Eclipse实际工作目录下,我想的是把上传的文件放在我们可以在Eclipse上直接操作的这个目录下(而不是.metadata..Eclipse实际工作目录下),除了绝对路径好像没什么办法
注意区分下部署目录和工程目录。web应用程序是在部署目录执行的。.metadata是部署目录,WebContent是工程目录。如果使用eclipse运行程序,那么工程就会部署到.metadata下面,实际文件就保存到该目录下。把项目拷贝到tomcat下的webapps下,也就是直接部署到服务器上,上传文件保存到该目录里。
也就是说在Eclipse中创建工程的时候要将工程目录放到tomcat的webapps下?那知道了。那还是那个问题:在Eclipse下,我在上面创建文件夹upload刷新后在部署目录下不会生成相应的文件(我试了下,若是再在upload下创建一个JSP文件部署目录就会生成upload文件夹),可之前好像不知道怎么,部署目录下会自动生成upload文件夹,你说的直接运行和重新部署是什么意思?怎么做?
直接运行:在webapps下新建目录ch1,把工程内容拷贝到tomcat下的;(拷贝的是WebContent下的文件,把编译好的最新的class文件放到WEB-INF下的classes中)这里的webapps/ch1就是部署的目录,与工程的实际目录不一样。(工程的目录可能在e:/ch1)启动tomcat,访问servlet,上传的文件就保存到webapps/ch1/upload文件夹里。不会放到.metadata里面了。不知道你的目的是不是这样?重新部署:
重新部署:Server标签下我并没有看到Status、Mode、Location等选项啊,如图:
看来你的是eclipse,没有部署的功能。要想使新建的upload目录体现在工作空间,除了刷新之外,可以试着手动删除已部署的工程,或直接Run as on server等,多试试。相对而言,My Eclipse就方便很多了。
提问者评价
不小心点错了,点到“取消推荐答案”了,真对不起
其他类似问题
为您推荐:
jspsmartupload的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&随笔档案(10)
阅读排行榜
评论排行榜

我要回帖

更多关于 jspsmartupload maven 的文章

 

随机推荐