java web文件上传 基于commons-fileupload-1.3.1.jar

上传文件的方法有很多种,我现在做的项目是使用Apache的fileupload。

首先我们需要commons-fileupload-1.3.1.jar的包。 maven在pom.xml导入,普通web项目放在WEB-INF的lib目录下

然后 commons-fileupload.jar 依赖于commons-io.jar,所以同理加入commons-fileupload.jar

下面是代码。 用的是spring mvc,功能在controller里实现

重新写了一遍注释,代码应该能看的很清楚了

/*
 * 接收上传的文件,返回文件地址
 */
 //url 地址
@RequestMapping("/uploadify")
public void uploadFile(HttpServletRequest request, HttpServletResponse response, HttpSession session)
        throws Exception {

    String type = request.getParameter("type");
    String ret_fileName = null;// 返回给前端已修改的图片名称

    // 临时文件路径
    String dirTemp = "/static/upload/temp";

    //图片存储相对路径
    String suitelogo = "";

    //设置图片存储相对路径
    //这里的type是前台传过来方便辨认是什么图片的参数,没有需要就不用判断
    if ("app".equals(type)) {
        suitelogo = "/static/upload/applogo";
    } else if ("suite".equals(type)) {
        suitelogo = "/static/upload/suitelogo";
    } else {
        suitelogo = dirTemp;
    }

    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=UTF-8");
    PrintWriter out = response.getWriter();

    // 获取当前项目的根目录  tomcat的绝对路径/webapps/项目名
    String realPath = session.getServletContext().getRealPath("");

    //获取tomcat下的ROOT目录,通过root绝对路径和存储图片文件夹的相对路径创建目录
    //mkdirs方法逐级创建目录。 mkdir只创建最后一级目录,前面目录不存在则不创建
    File realFile = new File(realPath);

    String rootPath = realFile.getParent() + "/ROOT";
    String normPath = rootPath + suitelogo;
    String tempPath = rootPath + dirTemp;

    File f = new File(normPath);
    File f1 = new File(tempPath);
    System.out.println(normPath);
    if (!f.exists()) {
        f.mkdirs();
    }

    if (!f1.exists()) {
        f1.mkdirs();
    }

    //创建文件解析对象
    DiskFileItemFactory factory = new DiskFileItemFactory();

    //设定使用内存超过5M时,将产生临时文件并存储于临时目录中
    factory.setSizeThreshold(5 * 1024 * 1024); 

    // 设定存储临时文件的目录
    factory.setRepository(new File(tempPath)); 

    //创建上传文件实例
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setHeaderEncoding("UTF-8");

    try {
        //解析request 成FileItem 因为支持多个文件上传,所以用list
        List<?> items = upload.parseRequest(request);
        Iterator<?> itr = items.iterator();

        while (itr.hasNext()) {

            //获取文件名
            FileItem item = (FileItem) itr.next();
            String fileName = item.getName();
            if (fileName != null) {
                fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
                fileName = getUUID() + fileName;
                ret_fileName = normPath + "/"+fileName;
            }

            //如果不是普通表单,则是文件上传表单,取二进制流写入本地
            if (!item.isFormField()) {

                try {
                    File uploadedFile = new File(normPath + "/" + fileName);
                    OutputStream os = new FileOutputStream(uploadedFile);
                    InputStream is = item.getInputStream();
                    byte buf[] = new byte[1024];// 可以修改 1024 以提高读取速度
                    int length = 0;
                    while ((length = is.read(buf)) > 0) {
                        os.write(buf, 0, length);
                    }
                    // 关闭流
                    os.flush();
                    os.close();
                    is.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    } catch (FileUploadException e) {
        e.printStackTrace();
    }
    // 将已修改的图片名称返回前台
    out.print(ret_fileName);
    out.flush();
    out.close();
}

//生成随机数字,防止文件重名
private String getUUID() {
    return UUID.randomUUID().toString();
}

流程主要几个步骤

1.创建文件解析对象DiskFileItemFactory factory = new DiskFileItemFactory();

2.创建上传文件实例ServletFileUpload upload = new ServletFileUpload(factory);

3获取上传的文件明,并把文件存入本地

时间: 2024-08-10 19:11:19

java web文件上传 基于commons-fileupload-1.3.1.jar的相关文章

Java Web文件上传

一. Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个: commons-fileupload commons-io 二.前端代码示例: <form method="post" id="uploadApkForm" action="uploadapk" enctype="multipart/form-data"> <p> 文件:<input name="

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

WEB文件上传下载过程简介(基于Struts2)

WEB文件上传过程简介(基于Struts2),页面上传.Action收取.解析:文件导出 文件处理过程,需要注意对文件的定期清理,避免磁盘占用过多: 1. jsp页面:   <s:file required="true" name ="myFile" theme="zx2"/> <s:form action ="myfile.action" name="form" method =&quo

web文件上传一学习记录 (简单的web浏览器可读文件的上传,servlet 文件上传)

文件上传:这里用得时表单上传的方式,表单上传到的时候 method一定指定为POST,enctype="multipart/form-data". 第一种方式,直接上传.读取.显示内容,并没有存储到服务器端. 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.g

Web文件上传原理

采用WEB技术实现B/S(浏览器/服务器)结构的管理系统是办公自动化的发展趋势.基于WEB技术的管理系统,由于开发周期短:与用户平台无关:易于实现交互式应用:能对信息进行快速.高效的收集.处理和发布,近几年来得到了迅速发展.而ASP技术由于其开发效率高.交互性好,安全性强等特点,逐渐成为开发管理系统的首选工具. 许多基于WEB的应用都涉及文件上传操作.常见的文件上传技术有:基于HTTP协议的:基于VB(或DELPHI等编程语言)开发的文件上传组件的:基于数据库技术的等等.这些方法一般都需要编程者

.Net 使用文件上传控件FileUpload上传图片

例1: 来源:http://long546324.iteye.com/blog/349946 Default.aspx文档: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1

java多线程文件上传服务器

描述: (1)jdk自带线程池见 JDK自带线程池配置 (2)此上传文件服务器中上传文件的后缀名通过第一段缓冲字符流传递,此缓冲字符流大小为1024,在文件接收端以1024接收.处理. 1.服务器代码如下(使用jdk自带线程池): 1 /** 2 * 服务器处理多线程问题 3 * 4 * 1.因为服务器是要很多人访问的,因此里面一定要用多线程来处理,不然只能一个人一个人的访问,那还叫Y啥服务器 5 * 6 * 2,拿上面这个文件上传的例子来说,它将每个连接它的用户封装到线程里面去,把用户要执行的

Java Socket文件上传

客户端: import java.io.FileInputStream; import java.net.Socket; /** * Created by 290248126 on 14-5-11. */ public class Client { public static void main(String[] args) throws Exception { FileInputStream fileInputStream = new FileInputStream("e:/1.png&quo

文件上传控件FileUpload用法初步

1 <asp:FileUpload ID="fudTest" runat="server" /> 2 <asp:Button ID="btnUpload" runat="server" Text="上传" OnClick="btnUpload_Click" /> 3 <br /> 4 <asp:Label ID="lblMessage&