文件上传的步骤

文件上传的步骤:
1.
2.首先要更改form的enctype="multipart/form-data"
表示向服务器传输的过程中以二进制的方式传输
默认传输类型: enctype="application/x-www-form-urlencoded"
3.相关jar包 下载地址 www.apache.org
commons-fileupload-1.2.1.jar 核心组件包
commons-io-2.0.1.jar --fileupload组件包,依赖了IO
commons-lang3-3.1.jar
commons-logging-1.1.3.jar

json-lib-2.4-jdk15.jar JSON工具类
struts2-json-plugin-2.3.15.1.jar

4.普通上传页面

`<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html> <head> <title>文件上传的开发</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head>

`

5.ajax上传页面

`<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ajax文件上传的开发</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<style type="text/css">
    #percent{width:600px;height:30px;position:relative;border:1px solid green;}
    #percent #per{height:30px;background:green;position:absolute;left:0;top:0;}
</style>
</head>
文件上传
<img id="showImg" width="160" height="120" />
<ul id="showlist">

</ul>


<div id="percent">
    <div id="per"></div>
</div>
<div id="pnum"></div>
<script type="text/javascript">
    function openFileDialog(){
        var ie = navigator.appName == "Microsoft Internet Explorer"?true:false;
        if(ie){
            //如果是ie浏览器
            document.getElementById("file").click();
        }else{
            //自定义事件es5中的内容
            var a = document.createEvent("MouseEvents");
            a.initEvent("click",true,true);
            document.getElementById("file").dispatchEvent(a);
        }
    };
    
    
    
    //ajax文件上传  不支持低版本浏览器
    function uploadFile(){
        //拿到文件上传的队列
        var files = document.getElementById("file").files
        var file = files[0];
        
        var type = file.type;//文件类型
        var name = file.name;//文件名称
        var size = file.size;//文件大小
        if(type.indexOf("image") == -1) {
            alert("请上传图片类型")
            return;
        }
        //alert(file.name+"===="+file.size+"==="+file.type);
        showImage(file,function(data){
            document.getElementById("showImg").src=data;
        })
        
        var form = new FormData();
        form.append("file",file);
        
        //如何传输给服务器端,进度条
        var xhr = new XMLHttpRequest();
        //请求服务器
        xhr.open("post", "upload/uploadAction.jsp?dirpath=pipi",true);
        xhr.onreadystatechange = function(){
            if(this.readyState == 4 && this.status == 200){
                var data = this.responseText;
                
                var jsonData = eval("("+data+")");
                var html = "";
                for(var i=0;i<jsonData.length;i++){
                    html += "<li>"+jsonData[i].name+"===="+jsonData[i].sizeString+"====<img src='"+jsonData[i].url+"' width='50' height='50'/>"
                }
                console.log(data);
                document.getElementById("showlist").innerHTML += html;
            }
        };
        
        xhr.upload.addEventListener("progress", progressFunction,false);
        xhr.send(form);
        
    }
    
    //进度条
    function progressFunction(evt){
    console.log("------");
        var perDom = document.getElementById("per");
        if(evt.lengthComputable){
            //evt.loaded已经上传了多少
            //event.total上传文件的总大小
            var p = evt.loaded / event.total;
            console.log(p);
            var pnum = Math.floor(p*100) +"%";
            perDom.style.width = pnum;
            document.getElementById("pnum").innerHTML = pnum;
        }
    }
    
    /*图片预览*/
    function showImage(f,callback){
        var reader = new FileReader();  
        reader.onload = (function(theFile) {  
            return function(e) {  
                // img 元素  
                if(callback)callback(e.target.result);
            };  
  
        })(f);  
        reader.readAsDataURL(f);  
    };    
    
</script>
`

6.后台处理类

`<%@page import="org.apache.struts2.json.JSONUtil"%>
<%@page import="com.rui.util.StrUtils"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%

/*文件上传的方式*/

//1.获取文件上传的工厂类
FileItemFactory factory = new DiskFileItemFactory();
//2.解析上传文件的工厂
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//3.通过解析类解析request对象中的二进制文件
List<FileItem> fileItems = fileUpload.parseRequest(request);
//4.读取二进制文件,写入服务器

//获取服务器的路径getRealPath()获取当前项目所在服务器的根目录 
//D:\tool\dev\apache-tomcat-7.0.56-windows-x86\apache-tomcat-7.0.56\me-webapps\fileUpload\resource
String dirpath = request.getParameter("dirpath");//
if(StrUtils.isEmpty(dirpath)) dirpath = "default";
String fpath = "resource/"+dirpath;
String path = request.getRealPath(fpath);
File rootPath = new File(path);
//如果目录不存在就动态创建
if(!rootPath.exists()){
    rootPath.mkdirs();
}

//如果有文件,就开始进行读和写
if(fileItems != null && fileItems.size()>0){
    List<Map<String,Object>> maps = new ArrayList<Map<String,Object>>();
    for(FileItem fileItem : fileItems){
        if(!fileItem.isFormField()){//判断是不是file表单
            //获取文件名称
            String filename = fileItem.getName();
            //文件大小
            long filesize = fileItem.getSize();
            //获取文件后缀
            String ext = StrUtils.getExt(filename, true);
            //重构文件的名称===头像上传的原理就是文件的覆盖
            String fname = UUID.randomUUID().toString()+ext;
            File fileName = new File(rootPath,fname);
            fileItem.write(fileName);
            
            Map<String,Object> map = new HashMap<String,Object>(); 
            map.put("name", filename);
            map.put("size", filesize);
            map.put("sizeString", StrUtils.countFileSize(filesize));
            map.put("url", fpath+"/"+fname);
            maps.add(map);
            
        }
    }
    out.print(JSONUtil.serialize(maps));
}else {
    out.print("");
    //response.sendRedirect("fail.jsp");
}    
//5.在服务器创建一个上传的目录
//6.开始写入
//7.返回数据

//response.sendRedirect("success.jsp");

%>`

7.工具类

`package com.rui.util;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
*

  • @ClassName: StrUtils

  • @Description: 工具类

  • @author poseidon

  • @date 2015年10月23日 下午8:13:45

  • @version V1.0.0
    */
    public class StrUtils {

    /**
    *

    • @Title: isEmpty
    • @Description: 空判断
    • @param content
    • @return boolean
      */
      public static boolean isEmpty(String content){
      return (content==null || content.equals(""))?true:false;
      }

    /**
    *

    • @Title: isNotEmpty
    • @Description: 非空判断
    • @param content
    • @return boolean
      */
      public static boolean isNotEmpty(String content){
      return !isEmpty(content);
      }

    /**
    *

    • @Title: formatDate
    • @Description: 格式化日期类
    • @param date
    • @param pattern
    • @return String
      */
      public static String formatDate(Date date,String pattern){
      if(date!=null){
      String dateString = new SimpleDateFormat(pattern).format(date);
      return dateString;
      }else{
      return "";
      }
      }

    /**
    *

    • @Title: getExt
    • @Description: 获取文件的后缀
    • @param name 文件名称
    • @param flag true有点false没点
    • @return String
      */
      public static String getExt(String name,boolean flag){
      if(isNotEmpty(name)){
      String ext = null;
      if(flag){
      ext = name.substring(name.lastIndexOf("."), name.length());
      }else{
      ext = name.substring(name.lastIndexOf(".")+1, name.length());
      }
      return ext;
      }else{
      return "";
      }
      }

    /**
    *

    • @Title: generateFileName
    • @Description: 为上传文件自动分配文件名称,避免重复
    • @param fileName
    • @param randomNum
    • @param dataPattern
    • @return String
      */
      public static String generateFileName(String fileName,int randomNum,String dataPattern) {
      // 获得当前时间
      DateFormat format = new SimpleDateFormat(dataPattern);
      // 转换为字符串
      String formatDate = format.format(new Date());
      // 随机生成文件编号
      int random = new Random().nextInt(randomNum);
      // 获得文件后缀名称
      int position = fileName.lastIndexOf(".");
      String extension = fileName.substring(position);
      // 组成一个新的文件名称
      return formatDate + random + extension;
      }

    /**
    *

    • @Title: countFileSize
    • @Description: 根据File文件的长度统计文件的大小
    • @param fileSize
    • @return String
      */
      public static String countFileSize(long fileSize) {
      String fileSizeString = "";
      try {
      DecimalFormat df = new DecimalFormat("#.00");
      long fileS = fileSize;
      if (fileS == 0) {
      fileSizeString = "0KB";
      } else if (fileS < 1024) {
      fileSizeString = df.format((double) fileS) + "B";
      } else if (fileS < 1048576) {
      fileSizeString = df.format((double) fileS / 1024) + "KB";
      } else if (fileS < 1073741824) {
      fileSizeString = df
      .format(((double) fileS / 1024 / 1024) - 0.01)
      + "MB";
      } else {
      fileSizeString = df.format((double) fileS / 1024 / 1024 / 1024)
      + "G";
      }
      } catch (Exception e) {
      e.printStackTrace();
      }
      return fileSizeString;
      }

    /**
    *

    • @Title: conversionSpecialCharacters
    • @Description: 把两个反斜线转换成正斜线
    • @param string
    • @return String
      */
      public static String conversionSpecialCharacters(String string) {
      return string.replaceAll("\\", "/");
      }

    public static void main(String[] args) {

    }
    }`

https://www.cnblogs.com/sun-rain/p/5203180.html

posted @ 2021-02-25 11:11  画画的Baby~  阅读(175)  评论(0)    收藏  举报