文件上传如何设置允许上传格式

xiaodu0989 2012-07-31 03:41:08
文件上传如何设置允许上传格式,在点击浏览时,弹出对话框中只出现符合条件的文件
...全文
3360 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jidu01 2013-11-22
  • 打赏
  • 举报
回复
html5可以实现过滤,不过IE9都不支持次特性。所以不能推广使用。 其他的过滤,目前看到的都是通过嵌入了flex实现的。可以看一下百度贴吧,回帖的插入图片。其中chrome浏览的话,直接使用的js处理的,而用IE,就成了嵌入flex,估计chrome端就是用的html5,本想照抄一下的,可惜看不到js函数
heroshen1988 2012-08-01
  • 打赏
  • 举报
回复
用js直接判断后缀不是更简单一些吗?
  • 打赏
  • 举报
回复
在提交之前 是可以判断的,楼上的已经非常清楚了
Jack0801 2012-08-01
  • 打赏
  • 举报
回复
图片上传格式的验证可以分前端验证和后端验证,一般来说要前端和后端都要验证,前端验证一般用js提交的时候验证后缀是否合法。

function checkfm(form){
var uploadfile = form.uploadfile.value;
if(uploadfile!=""){
var types = ["jpg","gif","bmp","png","exe","doc","pdf","txt","xls","ppt","swf"];
var ext = uploadfile.substring(uploadfile.length-3).toLowerCase();
var sing = false;
for(var i=0; i<types.length;i++){
if (ext==types[i]){
sing = true;
}
}
if(!sing){
alert("只允许上传图片/flash动画/word文件/exe文件/pdf文件/TxT文件/xls文件/ppt文件");
return false;
}
}
return true;
}
xiaodu0989 2012-08-01
  • 打赏
  • 举报
回复
其实我用了js判断和后台程序判断,现在就想在让对话框中的可选文件变成我想要的文件格式。
cfm2000 2012-08-01
  • 打赏
  • 举报
回复
六楼的不错,不过有些文件扩展名不是3位的。例如 office 2010
xiaodu0989 2012-08-01
  • 打赏
  • 举报
回复
不想纠结太多,我怕回帖多了,什么样的东西都出来了 ,还是结贴吧
z_yes163 2012-08-01
  • 打赏
  • 举报
回复
如果一定要做 你就用flex 生成一个swf 就是flash 文件嵌入到JSP 然后通过flex设置过滤文件类型就可以。
z_yes163 2012-08-01
  • 打赏
  • 举报
回复
直接告诉你是WEB 项目,不能过滤选择窗文件类型,你不能控制到UI层级 ,老大 你要搞清楚。
阿拉蕾小岩 2012-08-01
  • 打赏
  • 举报
回复
可以用JS或者后台验证,当提交上传的时候检测上传文件的后缀名,根据自己的需求进行过滤或者友情提示。
xiaodu0989 2012-08-01
  • 打赏
  • 举报
回复
能说点有用的办法吗,前台验证和后台验证明显体验效果不是很好,我选择个文件我还要到上面选择个半天,如果我碰到这样的网站,我直接不去了,效果太差,现在做网站注重的是用户体验
xiaodu0989 2012-08-01
  • 打赏
  • 举报
回复
我先说明白吧,前台js验证,我验证它的后缀名是不是我允许的,这个我做好了
后台程序代码验证,我获取上传文件全路径,同样我会验证所选文件后缀名是否和我要求上传的文件一致,
这两个我早就判断好了,但是我现在想要的是在点击<input type="file" >它的时候,弹出的一个选择文件的框,这个选择框中会把不符合我所要求的文件排除在外。
我要的是这个,
待絮 2012-08-01
  • 打赏
  • 举报
回复
支持六楼的
daxiang253 2012-08-01
  • 打赏
  • 举报
回复
直接用JS判断
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<script type="text/javascript">
function suffixalWord(){
var len = document.getElementById("file").value.length;
if(document.getElementById("file").value.substring(len-3,len) != "doc"){
document.getElementById("form").reset();
alert("上传的文档不是Word,请重新选择");
}else document.getElementById("form").submit();
}

</script>


</head>
<body>
<center>
<h1>请选择word文档</h1>
<form action="uploadWord.jsp" method="post" enctype="multipart/form-data" id="form">
<p>上传文件:<input type="file" name="file" id="file">
<p><input type="button" value="提交" onclick="suffixalWord()"/><input type="reset" value="重置"/></p>
</form>
</center>
</body>
</html>
我这里是判断是word文档的 自己去改下
z_yes163 2012-08-01
  • 打赏
  • 举报
回复
办法 很多
1、你给 file加change 事件 然后JS 截取 文件的后缀 如果不是你要的文件 直接把file 清空
2、如果你用Struts 直接在struts 中配置上传文件的格式
JAVA_01234 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
用js直接判断后缀不是更简单一些吗?
[/Quote]

讨教代码。
  • 打赏
  • 举报
回复
这个效果做出来很难吧。
可以换个思路,选择完文件之后,用JS来判断文件后缀是否合法。
pandrawla 2012-07-31
  • 打赏
  • 举报
回复
直接上代码:
@SuppressWarnings({"serial", "unchecked"})
public class UploadServlet extends HttpServlet {
private String uploadpath = null;
private String repository = null;
private long singlefilesize = 0;

@Override
public void init() throws ServletException {
// 获取初始化参数的值
uploadpath = getServletConfig().getInitParameter("uploadpath");
repository = getServletConfig().getInitParameter("repository");
singlefilesize = new Long(getServletConfig().getInitParameter("singlefilesize"));
}

@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=GBK");
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
System.out.println("isMultipart: " + isMultipart);

// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints
factory.setSizeThreshold(1024 * 1024 * 3);
factory.setRepository(new File(repository));

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置允许上传文件的大小
upload.setFileSizeMax(singlefilesize);

String path = getServletContext().getRealPath(uploadpath);
File dirFile = new File(path);
if(!dirFile.exists()){
dirFile.mkdir();
}
try {
// Parse the request
List<FileItem> items = upload.parseRequest(request);
System.out.println(items.size());
for(FileItem item : items){
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString("GBK");
System.out.println("name: " + name);
System.out.println("value: " + value);
request.setAttribute("name", name);
request.setAttribute("value", value);
} else {
String fieldName = item.getFieldName();
[color=#99CC00]//获取文件名,截取判断下

String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
System.out.println("fieldName: " + fieldName);
System.out.println("a fileName: " + fileName);
System.out.println("contentType: " + contentType);
System.out.println("isInMemory: " + isInMemory);
System.out.println("sizeInBytes: " + sizeInBytes);

request.setAttribute("fieldName", fieldName);
request.setAttribute("afileName", fileName);
request.setAttribute("contentType", contentType);
request.setAttribute("isInMemory", isInMemory);
request.setAttribute("sizeInBytes", sizeInBytes);

fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
System.out.println("b fileName: " + fileName);
request.setAttribute("bfileName", fileName);

/*fileName = FilenameUtils.getName(fileName);
System.out.println("b fileName: " + fileName);
request.setAttribute("bfileName", fileName);
String extension = FilenameUtils.getExtension(fileName);
System.out.println("extension: " + extension);*/

/*InputStream inputStream = item.getInputStream();
File saveFile = new File(dirFile, fileName);
FileOutputStream outputStream = new FileOutputStream(saveFile);
byte[] buffer = new byte[1024];
int len = 0;
while((len = inputStream.read(buffer)) != -1){
outputStream.write(buffer, 0, len);
}
outputStream.close();
inputStream.close();*/

File saveFile = new File(dirFile, fileName);
item.write(saveFile);
}
}
request.getRequestDispatcher("result.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
[/color]
shuchangkkk 2012-07-31
  • 打赏
  • 举报
回复
如果文件类型不会变动就前台写死,用js判断
s478853630 2012-07-31
  • 打赏
  • 举报
回复
<input type="file"/>明显做不到,
用其他插件吧!

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧