jsp实现文件的上传及javascript对上传文件的简单验证

[size=large]
前两天做OJ的时候,我做的两个功能都涉及到了文件的上传这个功能,所以我觉得很有必要把这个模块的代码记录下来,框架使用的struts2
首先,jsp页面中的的form表单是这样的

[/size]

<form method="post" enctype="multipart/form-data" name="form2">
<table>
<tr>
<td>上传</td>
<td><input type="file" name="file"/>(仅支持.zip格式的压缩文件)</td>
</tr>
</table>
input type="submit" value=" 提交 " onclick="test()"/>
</form>


其中form表单中的action方法我设置中了javascript代码中,用于对上传文件的验证

<script type="text/javascript">
function test()
{
if(form.file.value == "")
{
alert("请选择文件!");//确定文件框不为空
}
else
{
var path = form.file.value;
var name = ".zip";
var c = path.indexOf(name,path.length-4);
/*
验证文件的格式是否为.zip方法为检查文件路径的最后四个字符是否为.zip,是的话返回一个大于0的数字(即它们在整个字符串中的位置,如果没有的话则返回-1)
*/
if(c>=0)
{
form.action="contest/shengcheng.action"; //设置form表单的action
}
else
{
alert("文件格式不正确!");
}
}
}
</script>

要正确地把文件传到服务器上,action中的代码为

private File file;
private String fileFileName; //文件名,只是文件名没有路径



public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String upload() throws Exception
{
String root = ServletActionContext.getRequest().getRealPath("/upload");//上传的文件在服务器上保存的路径


File filepath = new File(root);
if(!filepath.exists())
filepath.mkdirs(); //判断/tmp目录是否存在,若不存在,创建

InputStream is = new FileInputStream(file);

File destFile = new File(filepath,fileFileName);

OutputStream os = new FileOutputStream(destFile);

byte[] buffer = new byte[400];

int length = 0;
while(-1 != (length = is.read(buffer)))
{
os.write(buffer,0,length);
}

is.close();
os.close();

return "success";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、验证类 1、数字验证内 1.1 整数 1.2 大于0的整数 (用于传来的id的验证) 1.3 负整数的验证 1.4 整数不能大于imax 1.5 整数不能小于imin 2、时间类 2.1 短时间,形如 (13:04:06) 2.2 短日期,形如 (2003-12-05) 2.3 长时间,形如 (2003-12-05 13:04:06) 2.4 只有年和月。形如(2003-05,或者2003-5) 2.5 只有小时和分钟,形如(12:03) 3、表单类 3.1 所有的表单的值都不能为空 3.2 多行文本框的值不能为空。 3.3 多行文本框的值不能超过smaxstrleng 3.4 多行文本框的值不能少于smixstrleng 3.5 判断单选框是否选择。 3.6 判断复选框是否选择. 3.7 复选框的全选,多选,全不选,反选 3.8 文件上传过程中判断文件类型 4、字符类 4.1 判断字符全部由a-z或者是a-z的字字母组成 4.2 判断字符由字母和数字组成。 4.3 判断字符由字母和数字,下划线,点号组成.且开头的只能是下划线和字母 4.4 字符串替换函数.replace(); 5、浏览器类 5.1 判断浏览器的类型 5.2 判断ie的版本 5.3 判断客户端的分辨率 6、结合类 6.1 email的判断。 6.2 手机号码的验证 6.3 身份证的验证 二、功能类 1、时间与相关控件类 1.1 日历 1.2 时间控件 1.3 万年历 1.4 显示动态显示时钟效果(文本,如oa中时间) 1.5 显示动态显示时钟效果 (图像,像手表) 2、表单类 2.1 自动生成表单 2.2 动态添加,修改,删除下拉框中的元素 2.3 可以输入内容的下拉框 2.4 多行文本框中只能输入imax文字。如果多输入了,自动减少到imax个文字(多用于短信发送) 3、打印类 3.1 打印控件 4、事件类 4.1 屏蔽右键 4.2 屏蔽所有功能键 4.3 --> 和<-- f5 f11,f9,f1 4.4 屏蔽组合键ctrl+n 5、网页设计类 5.1 连续滚动的文字,图片(注意是连续的,两段文字和图片中没有空白出现) 5.2 html编辑控件类 5.3 颜色选取框控件 5.4 下拉菜单 5.5 两层或多层次的下拉菜单 5.6 仿ie菜单的按钮。(效果如rongshuxa.com的导航栏目) 5.7 状态栏,title栏的动态效果(例子很多,可以研究一下) 5.8 双击后,网页自动滚屏 6、树型结构。 6.1 asp+sql版 6.2 asp+xml+sql版 6.3 java+sql或者java+sql+xml 7、无边框效果的制作 8、连动下拉框技术 9、文本排序 10,画图类,含饼、柱、矢量贝滋曲线 11,操纵客户端注册表类 12,div层相关(拖拽、显示、隐藏、移动、增加) 13,tablae相关(客户端动态增加行列,模拟进度条,滚动列表等) 14,各种<object classid=>相关类,如播放器,flash与脚本互动等 16, 刷新/模拟无刷新 异步调用类(xmlhttp或iframe,frame)
JSP Maker 是一款强大易用的代码生成器,可从MySQL和Oracle中快速生成一套完整JSP(JAVA服务器页)代码.使用生成的JSP,用户可以轻松查看,编辑,搜索以及添加删除网页上的数据库记录。生成的代码清洁并易于用户定制.JSP开发者可以更快地建立网站应用程序。 JSP 代码生成工具 JSP Maker 下载JSP 代码生成工具 JSP Maker 下载 JSPMaker功能列表:(单击链接查看更多详细信息和屏幕截图) 快速入门向导可快速生成JSP网站 可选的JSP列表,添加/复制,查看,编辑,删除和搜索每个表/查询的页面。所有脚本都通过URL正确链接。可自定义的字段显示顺序。 每个字段的高度可自定义的视图和编辑格式 编辑页面的客户端JavaScript验证 每个表/查询的可选搜索功能(基本/高级/两者)。 可选的高级安全性,用于保护数据免受未经授 通过以下方式定制生成的网站的外观和感觉: 与您自己的CSS链接 设置正文和表格属性 选择HTML模板 预览HTML表格布局 可定制的模板 支持代码页,字符集,区域设置ID和会话超时。可选的默认日期格式。 支持不同的SQL标识符引用字符 每个字段的标题和默认值(如果数据库是MS Access,将使用数据库中的原始值。) 从项目文件保存和恢复项目(JMP文件) 将项目设置与数据库中的更改同步。 在IIS中创建虚拟目录 主/细节页面 文件上传文件夹或数据库 CSS样式表 现场聚合 动态选择列表
文件上传下载是Web开发中常见的功能,可以通过servlet+jsp实现。下面是一个简单的示例: 1. 文件上传jsp页面中,使用form表单向servlet提交文件: ```html <form method="post" action="UploadServlet" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> ``` 在servlet中,使用Apache Commons FileUpload来处理文件上传: ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 检查是否是文件上传请求 if (!ServletFileUpload.isMultipartContent(request)) { response.getWriter().println("不是文件上传请求"); return; } // 创建文件上传工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓冲区大小,超过这个大小的文件将被写入临时文件 factory.setSizeThreshold(1024 * 1024 * 10); // 10MB // 设置临时文件存放目录 File tmpDir = new File("tmp"); if (!tmpDir.exists()) { tmpDir.mkdirs(); } factory.setRepository(tmpDir); // 创建文件上传处理器 ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件的大小限制 upload.setFileSizeMax(1024 * 1024 * 100); // 100MB // 解析上传文件 try { List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { // 保存上传文件 String fileName = item.getName(); String destPath = "upload/" + fileName; File destFile = new File(destPath); item.write(destFile); } } response.getWriter().println("上传成功"); } catch (Exception e) { e.printStackTrace(); response.getWriter().println("上传失败"); } } ``` 2. 文件下载 在jsp页面中,使用a标签指向servlet,并将要下载的文件名作为参数: ```html <a href="DownloadServlet?fileName=test.txt">下载</a> ``` 在servlet中,读取要下载的文件并将文件内容输出到response中: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileName = request.getParameter("fileName"); String filePath = "upload/" + fileName; File file = new File(filePath); if (!file.exists()) { response.getWriter().println("文件不存在"); return; } // 设置响应头,让浏览器下载文件 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setContentType("application/octet-stream"); // 输出文件内容 InputStream in = new FileInputStream(file); OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.close(); } ``` 以上就是一个简单的servlet+jsp文件上传下载实现。当然,这只是一个基础示例,实际应用中还需要考虑更多的情况,比如文件的安全性、文件的命名规则等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值