zoukankan      html  css  js  c++  java
  • 文件上传

    1. 另一个是commons-io.jar/下载地址:http://commons.apache.org/proper/commons-io/download_io.cgi

    2. html部分 :其中form表单method必须写post,enctype="multipart/form-data"表示以二进制的方式传递提交数据

    <!DOCTYPE html>

    <html>

    <head>

    <title>上传文件</title>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    </head>

    <body>

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

    <input type="text" name="nickname">

    <input type="file" name="upfile">

    <button type="submit">提交</button>

    </form>

    </body>

    </html>

     

    1. jsp部分

       

    request.setCharacterEncoding("utf-8");

    if (request.getContentType() != null) {

    DiskFileItemFactory factory = new DiskFileItemFactory();//当上传文件太大时,因为虚拟机能使用的内存时有限的,所以此时要通过临时文件来实现上传文件的保存

    factory.setSizeThreshold(500);//设置是否使用临时文件的临界值(单位字节)

    // factory.setRepository("路径");//设置文件路径

    ServletFileUpload upload = new ServletFileUpload(factory);//创建一个新的文件上传对象

    //设置上传单个文件的最大字节数为100M

    upload.setFileSizeMax(100*1024 * 1024 );

    //获取所有的表单数据

    List<FileItem> items = upload.parseRequest(request);

    String allowext="jpg|png|mp3";

    for (FileItem form : items) {

    if (form.isFormField()) {

    out.print(form.getFieldName() + "=" + new String(form.getString().getBytes("iso-8859-1"), "utf-8")); //解决编码乱码问题

    } else {

    String filename=form.getName();

    String ext=filename.substring(filename.lastIndexOf(".")+1);

    if (allowext.indexOf(ext)==-1) {

    throw new Exception("格式扩展名不符合");

    }

    if (form.getSize()>2*1024*1024) {

    throw new Exception("文件过大");

    }

    String root=request.getServletContext().getRealPath("/");

    String dirs="upfile/"+new SimpleDateFormat("yyMM/ddHH/").format(Calendar.getInstance().getTime());

    File file=new File(root+dirs);

    if (!file.exists()) {

    file.mkdirs();

    }

    String name=filename+System.currentTimeMillis()+Math.random();

    //转化成MD5加密格式

    MessageDigest md=MessageDigest.getInstance("MD5");

    md.update(name.getBytes());

    String md5sString=new BigInteger(1,md.digest()).toString(16);

    filename=md5sString.substring(8,24)+"."+ext;

    file=new File(root+dirs+filename);

    form.write(file);

    // File file = new File(request.getServletContext().getRealPath("/") + "2.png");

    }

    }

    }

     

    for( 变量类型 变量 :变量集合 ){

    }

    form.getFieldName()//获取普通表单里的name值

    form.getName() //获取文件名

     

    List list = upload.parseRequest(request);
    for(FileItem item : list){
    if(item.isFormField()){
    。。。。//判断该表单项是否是普通类型
    }else{
    。。。。 //否则该表单项是file 类型的
    }

    判断一个参数域是普通的表单输入域,还是文件上传域,如果该方法返回真的话,则是前者,如果为假,则是后者。是后者的情况下,就要对相应的域做相应的文件上传处理。

     

    String allowext="jpg|png|mp3";//存放允许的后缀名

    String filename=form.getName();//获取文件名

    String ext=filename.substring(filename.lastIndexOf(".")+1);//截取点以后的后缀

    if (allowext.indexOf(ext)==-1) {

    throw new Exception("格式扩展名不符合");

    }

     

     //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  c:a1.txt,而有些只是单纯的文件名,如:1.txt
                                 //
    处理获取到的上传文件的文件名的路径部分,只保留文件名部分
                                 filename = filename.substring(filename.lastIndexOf("\")+1);

    其他参考:http://bbs.csdn.net/topics/391032153

  • 相关阅读:
    ActiveMQ持久化消息
    JAXB XML到java object的转换
    Jackson JSON Processor
    Spring JDBC入门
    Quatz入门
    Jersey 入门与Javabean
    记安装ubuntu server和一些程序
    libevent 入门教程:Echo Server based on libevent(转)
    Linux Eclipse 运行Protobuf
    精神状态: Confused
  • 原文地址:https://www.cnblogs.com/bonly-ge/p/7050622.html
Copyright © 2011-2022 走看看