eclipse用法之java中文件的上传操作

一、单文件上传:
    1.首先前端页面的编写只有一个注意项:就是上传的文件中有图片时更改表单项的entype属性为:enctype="multipart/form-data"

      简单说明一下:表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件    上传;  只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.
      想知道具体为什么的可以百度一下

      下面是笔者写的前端jsp页面(特别简陋):

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/BServlet" method="post"  enctype="multipart/form-data">
        昵称:<input type="text" name="Name"><br />
        <input type="file" name="File"> <br />
        <input type="submit" value="上传">
    </form>
</body>
</html>

    2.servlet的编写:

      2.1首先是导包:

        > 我们一般情况下使用commons-fileupload-1.3.1.jar这个工具来解析多部件请求。
                > fileupload 依赖 commons-io 所以我们要是Filtupload需要同时导入io包。

所以我们需要导入的两个包笔者已经上传到百度云了,需要的朋友可以在这下载(链接:http://pan.baidu.com/s/1c17Ohqw 密码:v3g8)

      2.2接下来编写servlet:

        先来做一些简单的说明:

          DiskFileItemFactory - 工厂类,用于构建一个解析器实例。
                 ServletFileUpload - 解析器类,通过该类实例来解析request中的请求信息。

          FileItem - 工具会将我们请求中每一个部件,都封装为一个FileItem对象,处理文件上传时,只需要调用该对象的方法
                      -    方法:
                          boolean    isFormField()  --> 当前表单项是否是一个普通表单项,true是普通表单项, false是文件表单项
                          String    getContentType() --> 返回的是文件的类型,是MIME值
                          String    getFieldName()   --> 获取表单项的name属性值
                          String    getName()         --> 获取上传的文件的名字
                          long getSize()          --> 获取文件的大小
                          String    getString(String encoding) --> 获取表单项的value属性值,需要接受一个编码作为参数。
                          void    write(File file)    --> 将表单项中的内容写入到磁盘中
                             (这是我们经常需要用到的一些方法)
               > 使用步骤:
                    1.获取工厂类实例[DiskFileItemFactory]
                    2.获取解析器类实例[ServletFileUpload]
                    3.解析request获取FileItem[parseRequest()]

      下面是笔者写的一段简短的servlet代码(将上传的文件保存到电脑),希望对大家有写帮助:

  

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        // 用于测试前端页面是否与servlet连接好
        System.out.println("连接没问题");
        // 工厂类
        DiskFileItemFactory dfif = new DiskFileItemFactory();
        // 用于文件上传
        ServletFileUpload fileupload = new ServletFileUpload(dfif);
        // 设置文件大小(单个文件大小限制100k)
        fileupload.setFileSizeMax(1034 * 100);
        try {
            // 获取前端上传的文件
            List<FileItem> fileList = fileupload.parseRequest(request);
            for (FileItem item : fileList) {
                if (item.isFormField()) {
                    // 普通表单项(也就是jsp页面中name="Name"中的内容)
                    String name = item.getFieldName();
                    String value = item.getString("utf-8");
                    System.out.println(name + ":" + value);
                } else {
                    // 文件表单项
                    long size = item.getSize();
                    //文件的下载位置C:/Users/TYD/Desktop/123.jpg并命名为123.jpg
                    String path = "C:/Users/TYD/Desktop/123.jpg";
                    File f = new File(path);
                    try {
                        item.write(f);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

  try和catch是抛出异常

    下面这段代码是将上传的文件保存服务器:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("连接没问题");
        //工厂类
        DiskFileItemFactory dfif=new DiskFileItemFactory();
        //用于文件上传
        ServletFileUpload fileupload=new ServletFileUpload(dfif);
        //设置文件大小(单个文件大小限制50k)
        fileupload.setFileSizeMax(1034*50);

        //设置服务器地址
        ServletContext servletContext = request.getServletContext();
        //在服务器创建一个upload文件
        String realPath = servletContext.getRealPath("/upload");
        System.out.println("realPath"+realPath);
        File file = new File(realPath);
        //判断文件是否为空
        if(!file.exists()){
            //如果文件不存在,创建文件
            file.mkdir();
        }
        try {
            //获取前端上传的文件
            List<FileItem> fileList=fileupload.parseRequest(request);
            for(FileItem item:fileList){
                if(item.isFormField()){
                    //普通表单项
                    String name=item.getFieldName();
                    String value=item.getString("utf-8");
                    System.out.println(name+":"+value);
                }else{
                    //文件表单项
                    long size=item.getSize();//获取文件格式
                    //防止上传空文件
                    if(size ==0){
                        continue;
                    }

                    System.out.println("size:"+size);
                    //设置新创建的文件的名字
                    String contentType = item.getContentType();
                    String name = item.getName();
                    if(name.contains("\\")){
                        name = name.substring(name.lastIndexOf("\\")+1);
                    }
                    System.out.println("name:"+name);
                    //防止同名文件覆盖
                    String prefix = UUID.randomUUID().toString();
                    //去除文件中的-
                    prefix = prefix.replace("-","");
                    String fileName = prefix+"_"+name;
                    String fieldName = item.getFieldName();
                    System.out.println(size+":"+contentType+":--------"+name+":"+fieldName);

                    try {
                        item.write(new File(realPath+"\\"+fileName));
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }catch(FileSizeLimitExceededException e){
            System.out.println("文件大小不可以超过50K");
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

  接下来便是上传多个文件到服务器

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("连接没问题");
        //工厂类
        DiskFileItemFactory dfif=new DiskFileItemFactory();
        //用于文件上传
        ServletFileUpload fileupload=new ServletFileUpload(dfif);
        //设置多个文件总大小
        fileupload.setSizeMax(1024*200);
        //设置服务器地址
        ServletContext servletContext = request.getServletContext();
        //在服务器创建一个upload文件
        String realPath = servletContext.getRealPath("/upload");
        System.out.println("realPath"+realPath);
        File file = new File(realPath);
        //判断文件是否为空
        if(!file.exists()){
            //如果文件不存在,创建文件
            file.mkdir();
        }
        try {
            //获取前端上传的文件
            List<FileItem> fileList=fileupload.parseRequest(request);
            for(FileItem item:fileList){
                if(item.isFormField()){
                    //普通表单项
                    String name=item.getFieldName();
                    String value=item.getString("utf-8");
                    System.out.println(name+":"+value);
                }else{
                    //文件表单项
                    long size=item.getSize();//获取文件格式
                    //防止上传空文件
                    if(size ==0){
                        continue;
                    }

                    System.out.println("size:"+size);
                    //设置新创建的文件的名字
                    String contentType = item.getContentType();
                    String name = item.getName();
                    if(name.contains("\\")){
                        name = name.substring(name.lastIndexOf("\\")+1);
                    }
                    System.out.println("name:"+name);
                    //防止同名文件覆盖
                    String prefix = UUID.randomUUID().toString();
                    prefix = prefix.replace("-","");
                    String fileName = prefix+"_"+name;
                    String fieldName = item.getFieldName();
                    System.out.println(size+":"+contentType+":--------"+name+":"+fieldName);

                    try {
                        item.write(new File(realPath+"\\"+fileName));
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }catch(SizeLimitExceededException e){
            System.out.println("总大小不可以超过150k");
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

好了,关于文件的上传就到这里。希望对大家有些帮助。。。

时间: 2024-10-27 17:44:58

eclipse用法之java中文件的上传操作的相关文章

JSP中文件的上传于下载示例

一.文件上传的原理 1.文件上传的前提: a.form表单的method必须是post b.form表单的enctype必须是multipart/form-data(决定了POST请求方式,请求正文的数据类型) 注意:当表单的enctype是multipart/form-data,传统的获取请求参数的方法失效. 请求正文:(MIME协议进行描述的,正文是多部分组成的) -----------------------------7dd32c39803b2 Content-Disposition:

java中Commons-fileupload实现上传

java中Commons-fileupload组件实现上传 在实现功能之前需要导入两个jar文件,分别是 commons-fileupload-1.3.1.jar 和 commons-io.jar 文件,这里就不提供链接,网上搜索都有可以自行下载. ----------------------------------------------------jsp页面----------------------------------------------------- 第一步:先上传一个简单的js

struts中文件的上传和下载

首先我们还是新建一个新的web project 取名为upload_test 然后在WebRoot中新建两个jsp页面 upload.jsp 和result.jsp 代码分别如下: upload.jsp Jsp代码   <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getCont

Myeclipse中文件已经上传到服务器目录下,文件也没有被占用,但是页面中无法读取和使用问题的解决方法

这个问题是由于Myeclipse中文件不同步引起的.在Myeclipse中,工程文件是由Myeclipse自动扫描添加的,如果在外部修改了工程目录中的文件但又关闭了自动刷新功能,则会引起文件不同步.此外,在外部没有修改Myeclipse工程中的文件也有可能引起该问题. 解决方法: 有两种解决方法: 1)手动刷新.即在Myeclipse的工程目录中,右键refresh(或者按下F5). 2)配置Myeclipse的选项: a)Myeclipse启动时,刷新workspace,即勾选:window-

iOS开发中文件的上传和下载功能的基本实现-备用

感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: 复制代码代码如下: YYViewController.m#import "YYViewController.h" #define YYEnc

Java中向ftp上传、下载文件

最近的一个项目跟ftp打交道很多,经常需要向ftp上传.下载文件,现在总结一下公共方法. 上传 /** * 文件上传 * * @param ip * host * @param port * 端口 * @param userName * 用户名 * @param passWord * 密码 * @param localpath * 上传文件在本地磁盘路径 * @param fileName * 文件名 * @param remotePath * 文件要上传到ftp服务器的路径 * @throws

java中文件的I/O操作

java中文件的读写操作 (一) (1)java中文件的字节转成字符读操作 FileInputStream fStream = new FileInputStream("test.txt");//此时为字节流 byte[] b = new byte[31];//定义字节数组存储从文件夹中读取的数据,大小最多31字节 fStream.read(b);//将test.txt的数据读到b中 String line = new String(b,"UTF-8");//将字节

009 spring boot中文件的上传与下载

一:任务 1.任务 文件的上传 文件的下载 二:文件的上传 1.新建一个对象 FileInfo.java 1 package com.cao.dto; 2 3 public class FileInfo { 4 private String path; 5 public FileInfo(String path) { 6 this.path=path; 7 } 8 public String getPath() { 9 return path; 10 } 11 public void setPa

java大文件分片上传插件

我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭浏览器后再打开)仍然能够继续上传,重启电脑后仍然能够上传 支持文件夹的上传,要求服务端能够保留层级结构,并且能够续传.需要支持10万个以上的文件夹上传. 支持低版本的系统和浏览器,因为这个项目