jsp如何限制上传文件的类型

2024-11-15 15:25:05
推荐回答(3个)
回答(1):

你可以使用上传文件的插件的相关API来获取上传文件的扩展名,
不知道你用的上传文件的插件是哪个?
这里举个SmartUpload的例子:


<%
String ext = smart.getFiles().getFile(0).getFileExt() ;
//取得所上传的第一个文件的扩展名.
%>
=============================================================

那你的上传文件是有使用

这样的的HTML标签吧?

如果是这样的话,当你提交后,
你可以使用下面的语句来获取文件的扩展名,然后写相应的扩展名限制语句

<%
String fullFileName = request.getParameter("fileName");
int index = fullFileName.lastIndexOf('.');
String ext = fullFileName.substring(index+1);
%>


<%=ext%>

====================================================

那你所上传的MIME类型是怎么获取的?
不也就是Web容器根据你所上传的文件的扩展名在其相关的xml配置文件中(比如说Tomcat的全局web.xml)中的

xxx
xxx/xxx

中获取mime类型的吗?
说到底,mime类型的判断还是通过扩展名来实现的,
那么你可以在你的Web容器的相关配置文件中设置允许被上传的mime映射,
然后在处理上传文件的时候,在相关代码中写限制的代码,如果此上传文件的类型不在mime映射范围内,就不进行保存处理.

=================================================================
明白你的意思了,你是想通过所上传文件的文件头信息中的相关信息来获取此文件的MIME类型,然后再进行相关的限制吧?

=====================================
参见http://zhidao.baidu.com/question/100623013.html的回答
我觉得你不用其他的上传组件,至少你做Web项目要用Struts吧,
Struts中的org.apache.struts.upload.FormFile这个接口可以对上传的文件进行封装,然后通过其getContentType()返回的是一个所上传文件的MIME类型字符串,我测试过了,即使所上传文件没有扩展名,这个方法也可根据所上传的文件取到其MIME类型,这就可以根据这个方法返回的字符串值,在相应的业务逻辑中写限制的代码了吧.

回答(2):

用js脚本做判断,取得file组件的value,判断后缀

回答(3):

不用工具包的话,俺知道两种方法能判断.
第一种就是用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

附上页面的代码...


upload





file







以上是获得打开类型的方法,同样也可以得到后缀名...可能你获得后缀名的时候没注意...mime类型就在他后面...