jsp上传限制
① JSP上传文件
ServletFileUpload sfu = new ServletFileUpload(itemFactory);
// 设置上传文件的最大文件为10M
sfu.setSizeMax(0xA00000);
限制上传文件的的最大值的属性值设置
② JSP实现图片上传功能,本地测试没问题,发布到服务器上图片大小就不能超过50K,有遇到过这个问题的吗
你是说图片太大传不了吧?
这是由于空间商限制了上传大小的。
他们可以通过前端服务器(apache,nginx这些)来限制大小的就算给你tomcat的所有配置权限你也改不了他们的限制。
国内现在的JSP主机很烂。做jsp还是自已搞主机,或买linux VPS自已建环境的好。
③ JSP 上传防止重复
你是防止重复什么
是重复提交?还是重复名字?说清楚点
如果是防止重复提交
那你设置一个boolean变量
初始化是false
只有固定的通过某个渠道才能变为true
在上传完毕以后
改为false
这样来防止
如果是名字
你可以在后面追加一个时间
可以精确到毫秒再加一个随即数字
这样也可以
④ 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(maxSize>1.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 上传前能否先判断文件是否符合大小和格式限制啊
Connection conn = DataBase.getConnection();
ProctDAO proctDao = new ProctDAO();
CategoryDAO categoryDao = new CategoryDAO();
categoryDao.setConn(conn);
Proct proct = new Proct();
proctDao.setConn(conn);
//上传文件
SmartUpload upload = new SmartUpload();
// 上传初始化
upload.initialize(this.getServletConfig(), request, response);
// 设定上传限制
// 1.限制每个上传文件的最大长度。
upload.setMaxFileSize(1000000);
// 2.限制总上传数据的长度。
upload.setTotalMaxFileSize(10000000);
// 3.设定允许上传的文件(通过扩展名限制),仅允许gif.jpg文件。
upload.setAllowedFilesList("gif,jpg");
// 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
// jsp,htm,html扩展名的文件和没有扩展名的文件。
upload.setDeniedFilesList("exe,bat,jsp,htm,html");
//上传文件
upload.upload();
//利用request对象获取参数,接参
这个是我们用的upload 老师上课给的例子 下面代码就不给出了 都一样
⑥ 求助:jsp上传图片时限制长宽
这个,貌似实在后台控制文件接受的地方放实现,如果超时结束接受文件返回超时信息。
⑦ jsp做网页上传图片时,怎样限制上传图片的尺寸
试试如下代码
<html>
<head>
<title>Upload Image </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<SCRIPT LANGUAGE="JavaScript">
<!--
function imgExceedSize(w,h){
if(!document.IUpload.picsrc.value==""){
if(picshow.width>w||picshow.height>h){
alert("图像尺寸:"+picshow.width+"X"+picshow.height+"。\\图像尺寸过大!你只能上传尺寸为 "+w+"×"+h+"的图像,请重新浏览图片!");
return true;
}else{
return false;
}
}else{
return true;
}
}
function detect(){
document.getElementById('pic_show').style.display = '';
var ok=imgExceedSize(100,100);
if(ok){
document.IUpload.reset();
}else{
document.IUpload.submit();
}
}
//-->
</SCRIPT>
</head>
<body>
<form name="IUpload" action="upfile.asp" method="post">
<p> <input type="file" name="picsrc" size="40" onchange="picshow.src=document.IUpload.picsrc.value">
<input type="button" value="上载" onclick="detect()"> </p> </form>
<div id="pic_show" style="display:none;"> <img name="picshow" src="" title="图像预览"> </div>
</body>
</html>
⑧ 小弟我想在jsp页面上传文件 请教如何限
使用javascript,先在客户端判断要上传的文件的大小,如果超过上限值,不提交。
服务端也得判断。
jsp页面上传图片之后页面,当前页面的显示上传的图片可以自行更新。
第一种就是用JS直接在客户端判断截断掉.或AJAX把后缀提交到服务器再判断.但这样不安全.
第二种就是在服务器端判断了.
⑨ jspsmartupload不设置上传文件类型限制
这个方法,不是必需使用的。
setAllowedFilesList("jpg,bmp");
注意大小写
⑩ jsp如何限制上传文件的类型
你可以使用上传文件的插件的相关API来获取上传文件的扩展名,
不知道你用的上传文件的插件是哪个?
这里举个SmartUpload的例子:
<jsp:useBean id="smart" scope="page" class="com.jspsmart.upload.SmartUpload"/>
<%
String ext = smart.getFiles().getFile(0).getFileExt() ;
//取得所上传的第一个文件的扩展名.
%>
=============================================================
那你的上传文件是有使用
<input type="file" name="fileName">
这样的的HTML标签吧?
如果是这样的话,当你提交后,
你可以使用下面的语句来获取文件的扩展名,然后写相应的扩展名限制语句
<%
String fullFileName = request.getParameter("fileName");
int index = fullFileName.lastIndexOf('.');
String ext = fullFileName.substring(index+1);
%>
<br>
<%=ext%>
====================================================
那你所上传的MIME类型是怎么获取的?
不也就是Web容器根据你所上传的文件的扩展名在其相关的xml配置文件中(比如说Tomcat的全局web.xml)中的
<mime-mapping>
<extension>xxx</extension>
<mime-type>xxx/xxx</mime-type>
</mime-mapping>
中获取mime类型的吗?
说到底,mime类型的判断还是通过扩展名来实现的,
那么你可以在你的Web容器的相关配置文件中设置允许被上传的mime映射,
然后在处理上传文件的时候,在相关代码中写限制的代码,如果此上传文件的类型不在mime映射范围内,就不进行保存处理.
=================================================================
明白你的意思了,你是想通过所上传文件的文件头信息中的相关信息来获取此文件的MIME类型,然后再进行相关的限制吧?
=====================================
参见http://..com/question/100623013.html的回答
我觉得你不用其他的上传组件,至少你做Web项目要用Struts吧,
Struts中的org.apache.struts.upload.FormFile这个接口可以对上传的文件进行封装,然后通过其getContentType()返回的是一个所上传文件的MIME类型字符串,我测试过了,即使所上传文件没有扩展名,这个方法也可根据所上传的文件取到其MIME类型,这就可以根据这个方法返回的字符串值,在相应的业务逻辑中写限制的代码了吧.