• SmartUpload文件上传组件的使用教程


     

    在项目中使用SmartUpload组件可以进行文件的上传和下载操作

    使用步骤

    1.导入jar,进行build path操作

    2.编写文件上传页面,代码如下

    <form action="smartupload.jsp" method="post" enctype="multipart/form-data">

       请选择要上传的文件:<input type="file" name="pic">

       <input type="submit"  value="上传">

      </form>

    3.建立upload文件夹,文件夹在web跟目录下:

    4.实例化SmartUpload对象:

    5.初始化上传操作;

    6.准备上传

    7.保存文件

    代码如下:

    <%

    //1.实例化SmartUpload对象

    SmartUpload smart=new SmartUpload();

    //2.初始化上传操作

    smart.initialize(pageContext);

    //3.上传准备

    smart.upload();

    //保存文件

    smart.save("upload");

    %>

    单是现在出现一个问题,表单使用enctype="multipart/form-data"进行了二进制的封装,无法使用request.getParameter()方法获取值了,而是二进制的byte流了.

    上传页面代码如下:

     <form action="smartupload.jsp" method="post" enctype="multipart/form-data">

       姓名:<input type="text" name="uname"><br/>

       

    照片:<input type="file" name="pic"><br/>

       <input type="submit"  value="上传">

       </form>

    处理请求页面的代码如下:

    <%

    //1.实例化SmartUpload对象

    SmartUpload smart=new SmartUpload();

    //2.初始化上传操作

    smart.initialize(pageContext);

    //3.上传准备

    smart.upload();

    //保存文件

    smart.save("upload");

    request.setCharacterEncoding("UTF-8");

    %>

    <%="姓名是"+request.getParameter("uname") %>

    使用传统的request.getParameter("uname") 已经无法获取到用户输入的信息类.

    这个时候如果想要获取表单中的请求值,只有使用SmartUpload中的方法getRequest.getParameter()方法进行获取

    处理页面代码如下:

    <%

    //1.实例化SmartUpload对象

    SmartUpload smart=new SmartUpload();

    //2.初始化上传操作

    smart.initialize(pageContext);

    //3.上传准备

    smart.upload();

    //保存文件

    smart.save("upload");

    String name=smart.getRequest().getParameter("uname");

    name=new String(name.getBytes(),"UTF-8");

    %>

    <%="姓名是"+name %>

    但是现在发现另一个问题,我们多次上传一个文件,我们的文件夹里面始终就保存了一个,文件本身的覆盖导致的,

    解决方法,为我们上传的文件自动命名

    1.IP+时间戳+三位随机数

    建立一个类,专门完成文件自动命名

    处理文件保存页面的代码如下:

    <%

    //1.实例化SmartUpload对象

    SmartUpload smart=new SmartUpload();

    //2.初始化上传操作

    smart.initialize(pageContext);

    //3.上传准备

    smart.upload();

    //获取客户端的 IP地址

    String ip=request.getRemoteAddr();

    /*IpTimeStamp是自己定义的一个类,

    中有一个获得(IP+时间戳+三位随机数)字符串的方法*/

    IpTimeStamp its=new IpTimeStamp(ip);

    /*获取文件的扩展名.smart.getFiles()是获取我们上传的多

    个文件,getFile(0).这里面的0是下标getFileExt()是获取文件的扩展名*/

    String ext =smart.getFiles().getFile(0).getFileExt();

    //拼接文件名称

    String fileName=its.getIpTimeRand()+"."+ext;

    //java.io.File.separator是系统分隔符,win7"" 这是将文件保存为什么名字

    smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator+fileName);

    String name=smart.getRequest().getParameter("uname");

    name=new String(name.getBytes(),"UTF-8");

    //保存文件

    smart.save("upload");

    %>

    <%="姓名是"+name %>

    如果想要限制用户上传文件的扩展名

    假如我们一次性上传多个文件,可以使用getFiles()来获取我们上传的文件getFiles()方法返回的是一个数组

    smart.getFiles().getFile(0).getFileName()//获取文件名

    //matchs()String的方法,用来匹配正则表达式

    通过smart.getFiles().getFile(0).getFileName().matches(“^\w+.(jpg|gif)$”) 来对上传的文件进行验证,后缀匹配,form表单才能提交.

    文件的批量上传:

    需要用到smart的方法,getCount();来获取上传来多少个文件

    例如:smart.getFiles().getCount(),来获取批量上传的文件数量.再使用for循环来对文件进行重命名和保存的操作

  • 相关阅读:
    (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) (4)设计一个测试类
    定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。
    编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果
    Java泛型详解
    面向对象
    随机数
    随机数的产生
    随机数
    matplotlib 绘图实例01:正弦余弦曲线
    第05课 Linux命令初探(一)
  • 原文地址:https://www.cnblogs.com/zqr99/p/7542927.html
Copyright © 2020-2023  润新知