Java代码实现文件上传(转载)

刚刚发表了一篇Java发送电子邮件,以前真是没注意,commons里这么多常用项目,惭愧呀,直到现在回顾;要学习的真是太多了,还是缺少真正的学习能力...

这里用到的是commons-fileupload.jar与commons-io.jar;下载地址http://commons.apache.org/

这是一个web工程,所以先在webroot下新建一个jsp,其实直接用index.jsp就行了;下面是前端代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>文件上传</title>
  </head>

  <body>
  <c:if test="${param.code==‘001‘ }">操作成功</c:if>
    <form action="file.jspx" method="post"  enctype="multipart/form-data">
        文件描述:<input type="text" name="describe"/><br/>
        文件位置<input type="file" name="file"/><br/>
        <input type="submit" value="上传"/>
    </form>
  </body>
</html>

 这里表单请求到的是一个servlet,在src中创建一个Servlet,此处取名FileUpLoadServlet.java

代码实现如下:

package com.wf.web;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUpLoadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        File file=new File("D:/upload");//上传文件保存位置
        File tempfile=new File("D:/tempload");//上传缓存临时文件夹
        if(!file.exists()){
            file.mkdir();
        }
        if(!tempfile.exists()){
            tempfile.mkdir();
        }
//判断是否上传文件表单,也就是form中是否有enctype="multipart/form-data"项;必须post提交,get提交对内容长度有限制
        if(ServletFileUpload.isMultipartContent(request)){
            DiskFileItemFactory factory=new DiskFileItemFactory();
            factory.setSizeThreshold(1024*512);//设置缓冲区大小
            factory.setRepository(tempfile);//设置临时文件夹
            ServletFileUpload fileUpload=new ServletFileUpload(factory);
            fileUpload.setFileSizeMax(10*1024*1024);//设置最大文件大小

            try {
                @SuppressWarnings("unchecked")
                List<FileItem> items=fileUpload.parseRequest(request);//获取所有表单
                for(FileItem item:items){
                    //判断当前的表单控件是否是一个普通控件
                    if(!item.isFormField()){
                        //是一个文件控件时
                        String name=item.getName();
                        System.out.println("上传文件名:"+name);
                        System.out.println("文件大小:"+item.getSize());

                        String extName=name.substring(name.lastIndexOf("."));
                        String newName=new SimpleDateFormat("yyyyMMDDHHmmssms").format(new Date());

                        System.out.println("扩展名"+extName);
                        item.write(new File("d:/upload/"+newName+extName));
                    }else{
                        //是普通控件时
                        String desc=item.getString("UTF-8");
                        System.out.println("文件描述"+desc);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else{
            throw new RuntimeException("请设置form表单的enctype属性");
        }
        response.sendRedirect("index.jsp?code=001");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        doGet(req, resp);
    }

}

这里对上传文件的名字做了改变,防止上传同名文件(若同名,后覆盖前);

还有一点要注意,要是把这些上传文件放到WebRoot跟目录下,file的路径就不能为"D:/upload"了

通过

String webRootPath = getServletContext().getRealPath("/");        System.out.println("webRootPath:" + webRootPath);

        File file = new File(webRootPath+"upload");

获取webroot,最后将item.write(*****)更改为

item.write(new File(webRootPath+"upload/"+newName+extName));

这样上传文件就保存到webroot下的upload文件夹中了

时间: 2024-11-03 21:06:26

Java代码实现文件上传(转载)的相关文章

Java中实现文件上传下载的三种解决方案

第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numUp"; try { InputStream stream = file.getInputStream();// 把文件读入 String filePath = request.getRealPath(fileAddre);//取系统当前路径

【原创】用JAVA实现大文件上传及显示进度信息

用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框架中使用类似CommonsMultipartFile对象处理表二进制文件信息. 而.NET 中使用HtmlInputFile/ HttpPostedFile对象处理二进制文件信息. 优点:使用框架内置对象可以很方便的

使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及解决方案

import java.io.File; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.Upload; public class U

Java Web(十一) 文件上传与下载

文件上传 上传的准备工作 表单method必须为post 提供file组件 设置form标签的enctype属性为multipart/form-data,如果没有设置enctype属性,浏览器是无法将文件自身传递到服务端的(enctype默认为application/x-www-form-urlencoded) <form action="fileupload.do" method="post" enctype="multipart/form-dat

java+web+大文件上传下载

文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用HTML5的API,对文件上传进行渐进式增强:     * iframe上传  * ajax上传  * 进度条  * 文件预览  * 拖放上传 1.1 传统形式 文件上传的传统形式,是使用表单元素file,参考 http://www.ruanyifeng.com/blog/2012/08/file_

【Java】JavaWeb文件上传和下载

文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能.common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载.用该组件可实现一次上传一个或多个文件,并可限制文件大小. 开发环境 创建一个javaweb项目,加入common-f

java基础篇---文件上传(组件)

文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本篇主要说明smartupload组件上传. 在讲解smartupload上传前,我们先来看看不使用组件是怎么完成上传的原理的? 废话不多说直接上代码 import java.io.*; import java.util.*; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.Fil

java里面的文件上传与下载

文件的上传与下载主要用到两种方法:1.方法一:commons-fileupload.jar commons-io.jarapache的commons-fileupload实现文件上传,下载 [upload]package com.handson.bbs.servlet; import java.io.File;import java.io.IOException;import java.util.Date;import java.util.List;import javax.servlet.Se

Java实现FTP文件上传与下载

实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.net.Telnet