服务器端不可能去扫描到你客户端的硬盘中的数据,除非你在浏览网页时安装activex控件,由这个控件来扫描你的硬盘中指定文件夹路径下的文件
你现在想实现的,就是批是把一个文件夹中的全部上传到服务器,那么又要无组件上传,就肯定不能用activex控件了。
我提供的解决办法就是:使用flash进行文件上传,像swfupload这种flash文件上传组件,只显示文件浏览一个按钮,你可以在代码中设置是只允许选择一个文件进行上传,还是选择多个文件进行批量上传。上传是无刷新的效果,还可以实时显示上传进度。
如果你觉得这种方案可以满足你的要求(实际上就只是比你的需求多了一个选择文件的步骤),swfupload的具体代码,可以QQ我17595923,我可以把我项目中用到的代码以及swfupload中文手发给你。
----
另外补充一下:楼上几位说的批量上传组件,早就有了,只不过与楼主的需求不太适合。但用flash来实现,那就是天衣无缝了,而且也已经有现成的flash上传组件,swfupload这么好的工具,我的项目中也早就用上了。其实楼主的需求,最麻烦的是客户端的文件选择,而不是服务器端的上传代码。
所以,使用swfupload这个上传组件最方便实用,只是几个js文件,几个flash文件,就实现了客户端的文件批量选择,并且还是无刷新数据上传,实时显示文件上传进度。
服务端的ASP代码,随便用一个无组件上传都OK,像无惧文件上传类、风声无组件上传类等都是很好的ASP无组件上传类。Android中上传或者下载,使用最多的是xUtils和imageloader、glide,选用这两种的哪一种框架都行,因为是批量和大容易造成界面卡以及上传速度慢,对 *** 作不当就容易造成OOM异常,一般对于批量上传大都需要对也处理,然后在上传第一步需要对进行比例压缩之后再进行质量压缩,处理之后的比之前的会小很多,再加上框架的上传处理,会有很好的效果,希望对你有所帮助通过jxljar
去 *** 作 遍历execl里面的cell然后取出路径值 去用for循环 验证所以路径是否合法 存在文件 都合法存储 不和法 则打印异常
如果不去验证 则无法确认是不是所有文件都上传了
如果是2007的execl、建议你去看看openxml Java *** 作的话可以用POI只要你登录了Icloud,在里面找到照片,打开Icloud照片图库和上传到我的照片流和Icloud照片共享,这样当你手机连上WIFI后,就会自动帮你把你的照片都给上传到Icloud服务器上的环境准备
1. 下载并安装Tomcat(已经有很多关于Tomcat安装以及使用的文章,在这里不再介绍);
2. 下载File upload的jar包commons-fileupload-10-beta-1jar,并将该文件拷贝到{$TOMCAT}/common/lib目录下(其中{$TOMCAT}为Tomcat的安装目录);
3. 由于Fileupload子项目同时要用到另外一个项目commons-Beanutils,所以必须下载Beanutils,并将解压后的文件commons-beanutilsjar拷贝到{$TOMCAT}/common/lib目录下。
开发文件上传页面
文件上传的界面如图1所示。为了增加效率我们设计了三个文件域,同时上传三个文件。
图1 文件上传界面
页面的HTML代码如下:
<html>
<head>
<title>文件上传演示</title>
</head>
<body bgcolor=“#FFFFFF”text=“#000000” leftmargin=“0”topmargin=“40”marginwidth=“0” marginheight=“0”>
<center>
<h1>文件上传演示</h1>
<form name=“uploadform”method=“POST” action=“savejsp”ENCTYPE=“multipart/form-data”>
<table border=“1”width=“450”cellpadding=“4” cellspacing=“2”bordercolor=“#9BD7FF”>
<tr><td width=“100%”colspan=“2”>
文件1:<input name=“file1”size=“40”type=“file”>
</td></tr>
<tr><td width=“100%”colspan=“2”>
文件2:<input name=“file2”size=“40”type=“file”>
</td></tr>
<tr><td width=“100%”colspan=“2”>
文件3:<input name=“file3”size=“40”type=“file”>
</td></tr>
</table>
<br/><br/>
<table>
<tr><td align=“center”><input name=“upload” type=“submit”value=“开始上传”/></td></tr>
</table>
</form>
</center>
</body>
</html>
代码中要特别注意的是黑体处。必须保证表单的ENCTYPE属性值为multipart/form-data,这样浏览器才能正确执行上传文件的 *** 作。
处理上传文件信息
由于本文主要是讲述如何使用Commons-fileupload,所以为了便于修改、调试,上传文件的保存使用一个JSP文件来进行处理。我们将浏览器上传来的所有文件保存在一个指定目录下并在页面上显示所有上传文件的详细信息。保存页面处理结果见图2所示。
图2 保存页面
下面来看看savejsp的代码:
<%
/
演示文件上传的处理
@author <a href=“mailto:winterlau@163com”>Winter Lau</a>
@version $Id: savejsp,v 100 2003/03/01 10:10:15
/
%>
<%@ page language=“java”contentType=“text/html;charset=GBK”%>
<%@ page import=“javautil”%>
<%@ page import=“orgapachecommonsfileupload”%>
<html>
<head>
<title>保存上传文件</title>
</head>
<%
String msg = “”;
FileUpload fu = new FileUpload();
// 设置允许用户上传文件大小,单位:字节
fusetSizeMax(10000000);
// maximum size that will be stored in memory
// 设置最多只允许在内存中存储的数据,单位:字节
fusetSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fusetRepositoryPath(“C:\\TEMP”);
//开始读取上传信息
List fileItems = fuparseRequest(request);
%>
<body bgcolor=“#FFFFFF”text=“#000000” leftmargin=“0”topmargin=“40”marginwidth=“0” marginheight=“0”>
<font size=“6”color=“blue”>文件列表:</font>
<center>
<table cellpadding=0 cellspacing=1 border=1 width=“100%”>
<tr>
<td bgcolor=“#008080”>文件名</td>
<td bgcolor=“#008080”>大小</td>
</tr>
<%
// 依次处理每个上传的文件
Iterator iter = fileItemsiterator();
while (iterhasNext()) {
FileItem item = (FileItem) iternext();
//忽略其他不是文件域的所有表单信息
if (!itemisFormField()) {
String name = itemgetName();
long size = itemgetSize();
if((name==null||nameequals(“”)) && size==0)
continue;
%>
<tr>
<td><%=itemgetName()%></td>
<td><%=itemgetSize()%></td>
</tr>
<%
//保存上传的文件到指定的目录
name = namereplace(‘:’,‘_’);
name = namereplace(‘\\’,‘_’);
itemwrite(“F:\\”+ name);
}
}
%>
</table>
<br/><br/>
<a href=“uploadhtml”>返回上传页面</a>
</center>
</body>
</html>
在这个文件中需要注意的是FileUpload对象的一些参数值的意义,如下面代码所示的三个参数sizeMax、sizeThreshold、repositoryPath:
FileUpload fu = new FileUpload();
// 设置允许用户上传文件大小,单位:字节
fusetSizeMax(10000000);
// maximum size that will be stored in memory
// 设置最多只允许在内存中存储的数据,单位:字节
fusetSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fusetRepositoryPath(“C:\\TEMP”);
这3个参数的意义分别为:
SizeMax 用来设置上传文件大小的最大值,一旦用户上传的文件大小超过该值时将会抛出一个FileUploadException异常,提示文件太大;
SizeThreshold 设置内存中缓冲区的大小,一旦文件的大小超过该值的时候,程序会自动将其它数据存放在repositoryPath指定的目录下作为缓冲。合理设置该参数的值可以保证服务器稳定高效的运行;
RepositoryPath 指定缓冲区目录。
使用注意事项
从实际应用的结果来看该模块能够稳定高效的工作。其中参数SizeThreshold的值至关重要,设置太大会占用过多的内存,设置太小会频繁使用硬盘作为缓冲以致牺牲性能。因此,设置该值时要根据用户上传文件大小分布情况来设定。例如大部分文件大小集中在100KB左右,则可以使用100KB作为该参数的值,当然了再大就不合适了。使用commons-fileupload来处理>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)