---恢复内容开始---

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的更多相关文章

  1. Java Web 学习(8) —— Spring MVC 之文件上传与下载

    Spring MVC 之文件上传与下载 上传文件 表单: <form action="upload" enctype="multipart/form-data&qu ...

  2. 《Play for Java》学习笔记(六)文件上传file upload

    一. Play中标准方法 使用表单form和multipart/form-data的content-type类型. 1.Form @form(action = routes.Application.u ...

  3. Java Web使用Html5 FormData实现多文件上传

    前一阵子,迭代一个线上的项目,其中有一个图片上传的功能,之前用的ajaxfileupload.js来实现上传的,不过由于ajaxfileupload.js,默认是单文件上传(虽然可以通过修改源码的方法 ...

  4. Asp.net core 学习笔记 ( upload/download files 文件上传与下载 )

    更新 :  2018-01-22  之前漏掉了一个 image 优化, 就是 progressive jpg refer : http://techslides.com/demos/progressi ...

  5. Django学习笔记之Ajax与文件上传

      Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...

  6. Nodejs学习笔记(5) 文件上传系统实例

    目录 2018.8.4更新:  MySQL可以存放几乎任何类型的数据(图片.文档.压缩包等),但这不是最好的解决方案,正常情况下都是在数据库中存放文件路径,图片.音乐.视频.压缩包.文档等文件存放在硬 ...

  7. java web学习笔记-jsp篇

    1.java web简介 1.1静态页面与动态页面   表现形式 所需技术 静态网页 网页内容固定,不会更新 html,css 动态网页 网页内容由程序动态显示,自动更新 html,css,DB,ja ...

  8. java web 学习笔记 - JSP标签编程

    1.JSP标签编程简介 标签编程在开发中并不常见,主要是为了更好的理解struts等框架的标签而打基础,完善相关知识体系. 标签编程分为: 一个继承自TagSupport的标签类,一个在WEB-INF ...

  9. JMeter学习笔记(五) 文件上传接口测试

    此次测试的是上传图片接口,我把测试情况整理了一下,其他的上传文件接口都类似. 1.我通过jmeter的录制功能获取到了接口地址以及相关参数,如果有接口文档就会方便很多,此步骤就不多做说明了 2.因为上 ...

随机推荐

  1. iOS音频播放 (二):AudioSession 转

    原文出处 :http://msching.github.io/blog/2014/07/08/audio-in-ios-2/ 前言 本篇为<iOS音频播放>系列的第二篇. 在实施前一篇中所 ...

  2. [Java][Android] 多线程同步-主线程等待全部子线程完毕案例

    有时候我们会遇到这种问题:做一个大的事情能够被分解为做一系列相似的小的事情,而小的事情无非就是參数上有可能不同样而已! 此时,假设不使用线程,我们势必会浪费许多的时间来完毕整个大的事情.而使用线程的话 ...

  3. easyUI的getChanges中的inserted

    easyUI中的datagrid.treegrid编辑了数据,可以用getChanges命令来获取更新情况.按道理,有"inserted"."updated". ...

  4. 2015/12/30 字符集 ASCII 到Unicode

    ——每个软件开发人员应该无条件掌握的知识! ——Unicode伟大的创想! 相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"бЇЯАзЪСЯ"."�??????? ...

  5. Message: SyntaxError: unterminated string literal

    #Message: SyntaxError: unterminated string literalmytxt = words.replace('\n','').replace('\r','') js ...

  6. Keys.BACKSPACE Keys.SPACE

    browser.find_element_by_xpath(xp_newpage).send_keys(Keys.SPACE)browser.find_element_by_xpath(xp_newp ...

  7. HTML DOM createTextNode() 方法

    实例 创建一个文本节点: var btn=document.createTextNode("Hello World"); 输出结果: Hello World 尝试一下 » HTML ...

  8. Delphi中WebBrowser控件打开部分网站报"Invalid floating point operation”解决

    Delphi中WebBrowser控件打开部分网站报"Invalid floating point operation”解决 EmbeddedWBWebBrowserDelphi  最近用E ...

  9. Tensorflow学习笔记——张量、图、常量、变量(一)

    1 张量和图 TensorFlow是一种采用数据流图(data flow graphs),用于数值计算的开源软件库.其中 Tensor 代表传递的数据为张量(多维数组),Flow 代表使用计算图进行运 ...

  10. POJ2352 star

    传送门 这道题有个非常好听的名字,求二维偏序! 听起来似乎很高端,但就是让求满足对于每个i,xi < xj && yi < yj的个数. 这道题特别良心,给的顺序都是y递增 ...