本文目录一览:
- 1、jsp文件上传如何规定大小
- 2、请问jsp页面如何能获取到上传文件的大小,我想通过获取的大小,判断该文件是否可以被上传,请详细点,谢谢
- 3、jsp页面使用javascript获取文件的大小
- 4、.jsp是什么格式呀 ?
jsp文件上传如何规定大小
这是jspsmartupload本身一个缺陷!用jspsmartupload上传东西,当大小超过了某个值后就无法上传了.也就报出了以下异常:
java.lang.OutOfMemoryError: Java heap space
如果是上传小的东西,用这个jspsmartupload这个组件足够了,但是上传大的文件就不行了.建议用commonupload组件.
究其原因在jspsmartupload源码中有:
m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
int j;
for(; i m_totalBytes; i += j)
....
而m_request就是HttpServletRequest,它一次将文件流全部读入内存中,也就造成m_totalBytes超级的大,而在new byte[m_totalBytes];时就在内存在分配了一个超大的空间,内存受不了也就直接报异常了.所以除非改掉这种方式的上传否则是没法解决这个问题的.
而commonupload就不一般了,它可以设置一次读取文件最大部分是多少,比部文件有200Mb,你设置一次读取文件的大小是4MB,那么也就超过了一次读4MB到内存,然后就此4MB的部分写入硬盘中的临时文件中,然后再读取下面的4MB,接着把内存的东西刷到硬盘中.也就不会一次读入内存的东西太多,而造成内存的泻漏.
以下是使用commonupload上传的部分代码
String fileName = " ";
String appPath = request.getSession().getServletContext().getRealPath("/") ;
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(cacheSize); //缓冲大小
File temFile = new File(appPath+tempFileFold); //超过缓冲小放在临时文件夹,再一步一步上传
if(!temFile.exists()){
temFile.mkdirs();
}
factory.setRepository(temFile);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxFileSize); //最大大小
List fileList = null ;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException e) {
if (e instanceof SizeLimitExceededException) {
System.out.println("超过大小了,返回!");
double maxSize = maxFileSize/(1024.0*1024.0);
if(maxSize1.0){
float fileSize = Math.round(maxSize*1000)/1000;
request.setAttribute("message", MessageResource.readByString("file_size_overflow")+fileSize+"M");
}else{
double kMaxSize = maxFileSize/(1024.0);
float fileSize = Math.round(kMaxSize*100)/100;
request.setAttribute("message", MessageResource.readByString("file_size_overflow")+fileSize+"K");
}
request.setAttribute("page", request.getParameter("failpage"));
System.out.println("page:"+request.getAttribute("page")+" messgae:"+request.getAttribute("message"));
return "";
}
e.printStackTrace();
}
if (fileList == null || fileList.size() == 0) {
System.out.println("空文件,返回!");
return "";
}
// 得到所有上传的文件
Iterator fileItr = fileList.iterator();
// 循环处理所有文件
while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0;
// 得到当前文件
fileItem = (FileItem) fileItr.next();
// 忽略简单form字段而不是上传域的文件域(input type="text" /等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
// 得到文件的完整路径
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
if ("".equals(path) || size == 0) {
System.out.println("空文件2,返回!");
return "" ;
}
// 得到去除路径的文件名
String t_name = path.substring(path.lastIndexOf("\\") + 1);
// 得到文件的扩展名(无扩展名时将得到全名)
String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
String[] allowFiles = allowedFilesList.split(",");
boolean isPermited = false ;
for(String allowFile:allowFiles){
if(t_ext.equals(allowFile)){
isPermited = true ;
break ;
}
}
if(!isPermited){
request.setAttribute("message", t_ext+MessageResource.readByString("file_format_error")+allowedFilesList);
request.setAttribute("page", request.getParameter("failpage"));
System.out.println(t_ext+"文件格式不合法,合法文件格式为:"+allowedFilesList);
return "" ;
}
long now = System.currentTimeMillis();
// 根据系统时间生成上传后保存的文件名
String newFileName = String.valueOf(now)+"."+t_ext;
// 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
File desctemFile = new File(appPath + fileLocationFold); //超过缓冲小放在临时文件夹,再一步一步上传
if(!desctemFile.exists()){
desctemFile.mkdirs();
}
String u_name = appPath + fileLocationFold
+ newFileName ;
fileName = fileLocationFold+newFileName ;
try {
fileItem.write(new File(u_name));
} catch (Exception e) {
e.printStackTrace();
}
}
return fileName ;
请问jsp页面如何能获取到上传文件的大小,我想通过获取的大小,判断该文件是否可以被上传,请详细点,谢谢
因权限和安全限制,js是不能获得本地文件大小的,除非安装控件。
jsp获取上传文件大小方法如下:
long size=request.getContentLength() ;
在文件准备上传之前就可以得到其大小。
当然了,在客户端基本上不大可能获取大文件大小的,必须是文件提交上传开始后,在服务端获取得到的,request.getContentLength() ; 可以在接受数据流之前就可以获得当前要上传的文件流大小。 这样你可以在服务端控制文件上传之前是否允许继续接受数据流。
jsp页面使用javascript获取文件的大小
首先你要明白一些定义,
1 javascript 运行在客户端,即用户的浏览器上,
2 jsp运行服务器端,比如装有tomcat的电脑上
3 HTML只会运行在客户端浏览器上
3 放在HTML代码中的javascript所以也只能运行在客户端浏览器上
4 放在jsp中javascript在服务器端运行生成HTML代码发送到客户端浏览器上,所以放在jsp中的javascript最终还是只能运行在客户端浏览器上
5 你欲获取的附件大小在哪里,客户端还是服务器端呢,
6 目前考虑安全性方面,客户端一般是禁止在其浏览器上运行的javascript防问其电脑的文件,而且不同的客户端浏览器安全设置是不一样的,所以如果想获取客户端文件大小是行不通的,
7 目前流行的解决办法,一般既然是附件,都是要上传到服务器上的,可以上传的过程中在服务器端进行检查,在上传附件页面要告诉客户端用户附件上传大小的限制,这种提示在网络会经常见到的(推荐JSP中我常用到的上传组件jspSmartUpload)
希望这些有抛引作用
.jsp是什么格式呀 ?
jsp格式文件是一种动态网页技术标准,是用java语言编写的动态网页程序文件,主要出现在网站开发的过程当中。不过有些人会在下载的过程中无意间下载到jsp格式文件,比如downcc.com.jsp,出现这种情况应该是网站有防盗链功能的原因(意思A站的内容只允许在A站下载,B网站用就属于盗链)。如果你是这种情况,那么用下面这个办法即可解决。
解决办法其实也挺简单:就是在下载链接上点击鼠标右键然后选择“另存为”即可下载了。
上面出现了一个小插曲,现在回到主题jsp文件怎么打开的问题,作为普通网民或是网站开发者如何选择适合自己的方式打开jsp文件呢?请看下面介绍三种方法:
记事本
如果你并非网站开发者,只是想打开jsp格式的文件看看的话,那么每台电脑都有的记事本无疑是你最好的帮手了。方法是:打开一个记事本然后把你要打开的jsp文件拖入到记事本就可以了,打开后里是一些代码。
当然,这些代码只有学过jsp技术的网站开发人员才读得懂具体的含义了。但是他们是不会用记事本来打开或编辑jsp文件的,因为如果用记事本来处理显示得如此没有条理的代码,他们的脑细胞可要集体抗议了。下面这两款工具更适合他们:
优点:电脑无需下载其他软件即可实现打开jsp文件
缺点:显示无条理、密密麻麻让人头大,且功能上无法满足基本应用
UE编辑器
UE编辑器全称UltraEdit,是一款多功能的编辑器,其能打开的文本文件多到我数不出来。对于一个网站开发者而言,UE编辑器显示的效果以及功能上都要比记事本强很多,所以使用者还是挺多的。
UE编辑器功能实用,而且对jsp文件的一些代码有功能性醒目标注显示以及左边的代码行数标记,这对于开发者读、编代码而言无疑方便了很多。
优点:功能实用,支持众多在网站开发过程中需要使用的各种格式文件
缺点:不是免费的(但网站能下载到各种绿色版、中文汉化破解版)
Dreamweaver网页设计软件
功能强大的专业网页设计软件,网页设计三剑客之一。集网站开发过程中经常使用的多种功能于一身,对于打开jsp这类网站制作过程中常见的格式文件那是必备的底层功能,在功能上超过上面的UE编辑器。是专业、长期网站开发者必备软件。
优点:功能强大、实用,适合长期的专业开发者使用
缺点:收费软件,且对于本文“怎么打开jsp文件”的标题而言,它太“浮肿”了。
上面介绍的这三款软件对于的不同身份的使用者,可以更具自己的实际需求情况选择适合自己的方法来处理你的jsp文件。
其实可以打开和编译JSP文件的软件还有许多,例如:emeditor,editplus等都是非常不错的软件。