java web 学习笔记 - jsp用的文件上传组件 SmartUpload
---恢复内容开始---
1. SmartUpload
此控件在jsp中被广泛的使用,而FileUpload控件主要是用在框架中
2. 如果想要使用,需要在tomcat的lib目录中,将SmartUpload的jar包拷贝进来
3.通过表单上传文件,由于文件动不动就是几百k, 表单的方法必须是post,不可能用get方法进行地址重写。
另外,如果要上传文件的话,需要对表单进行封装 mutipart/form-data
以下是smartupload_demo01.jsp
表单封装之后,无法通过request内置对象来获取相应的parameter属性了,因为转换为二进制形式了。
可以用smart.getRequest().getParameter()来获取
上传图片文件是,为了避免同名覆盖问题,需要上传时自动生成一个图片名称。
格式为 IP地址+时间戳+随机数
以上时间戳的增加,可以写一个java类来实现。
package lib.liys.timestamp;
import java.text.SimpleDateFormat ;
import java.util.Date ;
import java.util.Random ;
public class IPTimeStamp{
private SimpleDateFormat sdf = null;
private String ip = null ;
public IPTimeStamp(){
}
public IPTimeStamp(String ip){
this.ip = ip ;
}
public String getIPTimeRand(){
StringBuffer buf = new StringBuffer();
if(this.ip!=null){
String s[] = this.ip.split("\\.") ; //通过split返回String 数组
for(String x:s){
buf.append(addZero(x,3));
}
}
buf.append(this.getTimeStamp()) ;
Random r = new Random() ; //3位随机的整数
for(int i=0;i<3;i++){
buf.append(r.nextInt(10)) ;
}
return buf.toString() ; //StringBuffer转换为string
}
public String getTimeStamp(){
this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS") ; //定义特定的时间格式
return this.sdf.format(new Date()) ; //格式化日期,返回字符串
}
private String addZero(String str,int len){
StringBuffer s = new StringBuffer() ;
s.append(str) ;
while(s.length() < len){
s.insert(0,"0") ; //buffer插入操作,从左边插入“0”字符
}
return s.toString() ; //StringBuffer转换为string
}
public static void main(String args[]){ //写一个main函数执行一下
System.out.println(new IPTimeStamp("192.168.1.1").getIPTimeRand());
}
}
如果javac -d . *.java编译后,想执行看效果,需要输入java.lib.liys.timestamp.IPTimeStamp;
最后写一个jsp文件
<%@page contentType="text/html" pageEncoding="GBK"%>
<%@page import = "org.lxh.smart.*"%> //jar包在tomcat下的lib目录中,需要看jar包内的目录结构
<%@page import = "lib.liys.timestamp.*"%> //导入时间戳类
<html>
<head>
<title>
SmartUpload上传表单
</title>
</head>
<body>
<% request.setCharacterEncoding("GBK"); %>
<%
SmartUpload smart = new SmartUpload();
smart.initialize(pageContext) ; // 初始化上传操作
smart.upload();
String name = smart.getRequest().getParameter("uname") ;
IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr());
String ext = smart.getFiles().getFile(0).getFileExt(); //获取smart扩展名
String fileName = its.getIPTimeRand() + "." + ext ;
smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/jspstudy/")+"upload"+java.io.File.separator + fileName) ; //保存文件
%>
<%=smart.getFiles().getFile(0).getFileName().matches("^\\w+.(jpg|gif)$")%>
<h2>姓名:<%=name%></h2>
<img src="../upload/<%=fileName%>">
</body>
</html>
如果是多个上传图片的话,则需要循环获取
---恢复内容结束---
java web 学习笔记 - jsp用的文件上传组件 SmartUpload的更多相关文章
- Java Web 学习(8) —— Spring MVC 之文件上传与下载
Spring MVC 之文件上传与下载 上传文件 表单: <form action="upload" enctype="multipart/form-data&qu ...
- 《Play for Java》学习笔记(六)文件上传file upload
一. Play中标准方法 使用表单form和multipart/form-data的content-type类型. 1.Form @form(action = routes.Application.u ...
- Java Web使用Html5 FormData实现多文件上传
前一阵子,迭代一个线上的项目,其中有一个图片上传的功能,之前用的ajaxfileupload.js来实现上传的,不过由于ajaxfileupload.js,默认是单文件上传(虽然可以通过修改源码的方法 ...
- Asp.net core 学习笔记 ( upload/download files 文件上传与下载 )
更新 : 2018-01-22 之前漏掉了一个 image 优化, 就是 progressive jpg refer : http://techslides.com/demos/progressi ...
- Django学习笔记之Ajax与文件上传
Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...
- Nodejs学习笔记(5) 文件上传系统实例
目录 2018.8.4更新: MySQL可以存放几乎任何类型的数据(图片.文档.压缩包等),但这不是最好的解决方案,正常情况下都是在数据库中存放文件路径,图片.音乐.视频.压缩包.文档等文件存放在硬 ...
- java web学习笔记-jsp篇
1.java web简介 1.1静态页面与动态页面 表现形式 所需技术 静态网页 网页内容固定,不会更新 html,css 动态网页 网页内容由程序动态显示,自动更新 html,css,DB,ja ...
- java web 学习笔记 - JSP标签编程
1.JSP标签编程简介 标签编程在开发中并不常见,主要是为了更好的理解struts等框架的标签而打基础,完善相关知识体系. 标签编程分为: 一个继承自TagSupport的标签类,一个在WEB-INF ...
- JMeter学习笔记(五) 文件上传接口测试
此次测试的是上传图片接口,我把测试情况整理了一下,其他的上传文件接口都类似. 1.我通过jmeter的录制功能获取到了接口地址以及相关参数,如果有接口文档就会方便很多,此步骤就不多做说明了 2.因为上 ...
随机推荐
- Python3标准库(二) re模块
正则表达式(Regular Expression)是字符串处理的常用工具,通常被用来检索.替换那些符合某个模式(Pattern)的文本.很多程序设计语言都支持正则表达式,像Perl.Java.C/C+ ...
- Spring MVC 数据验证——validate编码方式
1.导入jar包 validation-api-1.0.0.GA.jar这是比較关键的一个jar包,主要用于解析注解@Valid. hibernate-validator-4.3.2.Final.ja ...
- C语言之函数调用17—递归法之中的一个般函数的调用(2)
//递归法 /* ================================================================== 题目:求F(60),当中F(n)定义例如以下: ...
- APICloud平台的融云2.0集成
融云2.0的官方文档地址:http://docs.apicloud.com/端API/开放SDK/rongCloud2 项目须要IM模块,最后还是选择了融云.在iOS原生开发中,融云sdk集成了聊天界 ...
- Class 与 new的配合使用
class Type{ // 定义新的类型Type /// ...... }; Type a; Type b; // 像int a; int b;那样使用, 定义a和b为Type类型的变量 in ...
- Codeforces Round #214 (Div. 2) C. Dima and Salad 背包
C. Dima and Salad Dima, Inna and Seryozha have gathered in a room. That's right, someone's got to ...
- [整理]EABI和OABI【转】
本文转载自:https://www.crifan.com/order_eabi_and_oabi/ 1.什么是ABIABI,application binary interface (ABI),应用程 ...
- 【Silverlight】Bing Maps学习系列(六):使用扩展模式(Extended Modes)(转)
[Silverlight]Bing Maps学习系列(六):使用扩展模式(Extended Modes) 微软Bing Maps推出有有段时间了,通过不断的改进和新的地图更新,现在已经基本上形成了一套 ...
- 一个shell脚本清空所有vim的配置!!
这个是从dyl的脚本那里偷过来的哈哈--(其实我现在还不是很懂shell [ -d .vim ] && mv -v .vim .vim.$(stat -c%Y .vim) [ -f . ...
- bzoj4825
LCT 昨天调试一天没出来,今天推倒重写还是gg了,内心崩溃照着源代码抄,结果发现自己把原树fa和splay的fa一起维护,各种re... 其实我们手玩一下,发现其实树的形态变化很小,那么就可以用lc ...