Java Web文件上传

一、

Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个:

commons-fileupload

commons-io

二、前端代码示例:

    <form method="post" id="uploadApkForm" action="uploadapk"
        enctype="multipart/form-data">
        <p>
            文件:<input name="apkFile" type="file" /> <!--有multiple属性时支持选中多个文件同时上传-->
        </p>
        <p>
            版本:<input name="version" type="text" placeholder="请输入版本信息" />
        </p>
    </form>
注:

 enctype="multipart/form-data" 是必须的;

 若type="file" 的 input标签含有 multiple 属性,则能够在弹出框中同时选中多个文件上传

三、后端代码示例:

        try {
            // 判断enctype属性是否为multipart/form-data
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if (!isMultipart) {// 不是文件上传,用传统方法获取数据
                // String userId = request.getParameter("userId");等
                return;
            }

            // 为multipart/form-data
            int maxMemorySize = 1024 * 1000 * 50;// 50MB
            int maxRequestSize = 1024 * 1000 * 100;// 100MB
            String projAbsolutePath = request.getRealPath("");
            String uploadRelativeDir = "upload/apk/";
            String uploadTmpRelativeDir = uploadRelativeDir + "/tmp/";
            File uploadDirObj = new File(projAbsolutePath + uploadRelativeDir);
            if (!uploadDirObj.exists()) {
                uploadDirObj.mkdirs();
            }
            File uploadTmpDirObj = new File(projAbsolutePath + uploadTmpRelativeDir);
            if (!uploadTmpDirObj.exists()) {
                uploadTmpDirObj.mkdirs();
            }

            // Create a factory for disk-based file items
            DiskFileItemFactory factory = new DiskFileItemFactory();

            // 当上传文件太大时,因为虚拟机能使用的内存是有限的,所以此时要通过临时文件来实现上传文件的保存
            // 此方法是设置是否使用临时文件的临界值(单位:字节)
            factory.setSizeThreshold(maxMemorySize);
            // 与上一个结合使用,设置临时文件的路径(绝对路径)
            factory.setRepository(uploadTmpDirObj);

            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);

            // 解决上传文件名的中文乱码,tomcat8不需要了
            // upload.setHeaderEncoding("UTF-8");

            // 设置上传内容的大小限制(单位:字节)
            upload.setSizeMax(maxRequestSize);

            // Parse the request
            List<FileItem> items = upload.parseRequest(request);
            Iterator<?> iter = items.iterator();
            String fieldName = null;
            FileItem item = null;
            String fileName = null;
            String version = null;
            while (iter.hasNext()) {
                item = (FileItem) iter.next();
                fieldName = item.getFieldName();
                if (item.isFormField()) {// 普通表单字段,版本信息
                    version = item.getString();
                    System.out.println(fieldName + " " + version);
                } else {// 文件字段
                    fileName = item.getName();
                    if (!fileName.endsWith("apk")) {// 不是apk文件
                        System.out.println("不是apk文件");
                        return;
                    }
                    fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
                    String contentType = item.getContentType();
                    boolean isInMemory = item.isInMemory();
                    long sizeInBytes = item.getSize();
                    System.out.println(fileName + " " + contentType + " " + isInMemory + " " + sizeInBytes);
                    item.write(new File(uploadDirObj, fileName));
                }
            }
            apkInfoMapper.insertVersionInfo(version,
                    new SimpleDateFormat("yy-MM-dd HH:mm:ss").format(System.currentTimeMillis()),
                    (uploadRelativeDir + fileName));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

 注:

 为保证服务器安全,如果文件不提供下载,上传文件应该放在外界无法直接访问的目录下,如WEB-INF目录下;

 不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,而有些只是单纯的文件名,要处理获取到的上传文件的文件名的路径部分,只保留文件名部分;

 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名

时间: 2024-11-03 21:00:18

Java Web文件上传的相关文章

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.

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里实现 重新写了一遍注释,代码应该能看的很清楚了

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

Web文件上传原理

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

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

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

java web图片上传和文件上传

图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定要写属性enctype="multipart/form-data" 2.为了能保证文件能上传成功file控件的name属性值要和你提交的控制层变量名一致, 例如空间名是file那么你要在后台这样定义 private File file; //file控件名 private String fileContentType;//图

JAVA实现文件上传

  代码如下: 还要两个jar包      前台页面: 01 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 02 <% 03 String path = request.getContextPath(); 04 String basePath = request.getScheme()+"://"+request.ge

web文件上传

文件上传的步骤: 1.目前Java文件上传功能都是依靠Apache组织的commons-io, fileupload两个包来实现的: 2. http://commons.apache.org/下载io,fileupload包 添加到项目中的WEB-INF/lib文件夹下: 3.文件上传的时候文件一般是存在服务器的upload目录下,文件名称 存储在数据库中,为了防止上传的文件同名,我们需要动态的 修改上传文件的名称.  4.必须设计form表单类型为(请求方式为:post请求,添加属性encty