jsp如何限制上传文件的类型 50
要从扩展名和mimi类型两方面来考虑的,我只知道从扩展名限制,不知道如何获得上传文件的mimi类型并加以控制。望高手能够帮我解答,谢谢。我不想依赖第三方上传组件中的API...
要从扩展名和mimi类型两方面来考虑的,我只知道从扩展名限制,不知道如何获得上传文件的mimi类型并加以控制。望高手能够帮我解答,谢谢。
我不想依赖第三方上传组件中的API,因为并非每一个上传组件都集成有过滤上传文件功能,我要通过上传文件的mime类型过滤上传文件(不是通过扩展名),一个文件的mime类型是存在其文件头中的标识信息,扩展名修改后它的mime类型是不会变的呀,很多组件都没有这个功能。 展开
我不想依赖第三方上传组件中的API,因为并非每一个上传组件都集成有过滤上传文件功能,我要通过上传文件的mime类型过滤上传文件(不是通过扩展名),一个文件的mime类型是存在其文件头中的标识信息,扩展名修改后它的mime类型是不会变的呀,很多组件都没有这个功能。 展开
3个回答
展开全部
你可以使用上传文件的插件的相关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://zhidao.baidu.com/question/100623013.html的回答
我觉得你不用其他的上传组件,至少你做Web项目要用Struts吧,
Struts中的org.apache.struts.upload.FormFile这个接口可以对上传的文件进行封装,然后通过其getContentType()返回的是一个所上传文件的MIME类型字符串,我测试过了,即使所上传文件没有扩展名,这个方法也可根据所上传的文件取到其MIME类型,这就可以根据这个方法返回的字符串值,在相应的业务逻辑中写限制的代码了吧.
不知道你用的上传文件的插件是哪个?
这里举个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://zhidao.baidu.com/question/100623013.html的回答
我觉得你不用其他的上传组件,至少你做Web项目要用Struts吧,
Struts中的org.apache.struts.upload.FormFile这个接口可以对上传的文件进行封装,然后通过其getContentType()返回的是一个所上传文件的MIME类型字符串,我测试过了,即使所上传文件没有扩展名,这个方法也可根据所上传的文件取到其MIME类型,这就可以根据这个方法返回的字符串值,在相应的业务逻辑中写限制的代码了吧.
展开全部
用js脚本做判断,取得file组件的value,判断后缀
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用工具包的话,俺知道两种方法能判断.
第一种就是用JS直接在客户端判断截断掉.或AJAX把后缀提交到服务器再判断.但这样不安全.
第二种就是在服务器端判断了.
我网站的代码:
前面是ServletInputStream in = request.getInputStream();然后传给后面.页面是提交了一个文件.
接收类这么获取:
public void dohead(ServletInputStream in) throws Exception
{
int lwa=0;
int i=in.read();
while (i != -1) {
if(i=='\r') lwa++;if(lwa>=4) break;
System.out.print((char)i);
i = in.read();
}
in.read();
}
上面是取得request.getInputStream的二进制文件流的头部.结果如下[1.JPG]:
-----------------------------7d935b1e401de
Content-Disposition: form-data; name="f"; filename="C:\Documents and Settings\Administrator\My Documents\My Pictures\1.JPG"
Content-Type: image/pjpeg
我想你要的就是Content-Type: image/pjpeg
附上页面的代码...
<html>
<head>
<title>upload</title>
<head>
<body>
<form action="Upload.lw" enctype="multipart/form-data" method=post>
<br/>
file<input type="file" name="f" />
<br/>
<input type ="submit" value="submit" />
</form>
</body>
</html>
以上是获得打开类型的方法,同样也可以得到后缀名...可能你获得后缀名的时候没注意...mime类型就在他后面...
第一种就是用JS直接在客户端判断截断掉.或AJAX把后缀提交到服务器再判断.但这样不安全.
第二种就是在服务器端判断了.
我网站的代码:
前面是ServletInputStream in = request.getInputStream();然后传给后面.页面是提交了一个文件.
接收类这么获取:
public void dohead(ServletInputStream in) throws Exception
{
int lwa=0;
int i=in.read();
while (i != -1) {
if(i=='\r') lwa++;if(lwa>=4) break;
System.out.print((char)i);
i = in.read();
}
in.read();
}
上面是取得request.getInputStream的二进制文件流的头部.结果如下[1.JPG]:
-----------------------------7d935b1e401de
Content-Disposition: form-data; name="f"; filename="C:\Documents and Settings\Administrator\My Documents\My Pictures\1.JPG"
Content-Type: image/pjpeg
我想你要的就是Content-Type: image/pjpeg
附上页面的代码...
<html>
<head>
<title>upload</title>
<head>
<body>
<form action="Upload.lw" enctype="multipart/form-data" method=post>
<br/>
file<input type="file" name="f" />
<br/>
<input type ="submit" value="submit" />
</form>
</body>
</html>
以上是获得打开类型的方法,同样也可以得到后缀名...可能你获得后缀名的时候没注意...mime类型就在他后面...
参考资料: X度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询