JavaWeb中上传和下载文件实例代码

一丶先引入上传下载的lib

二丶上传的的servlet

package com.test.action;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/upload")
public class FileUpLoadAction extends HttpServlet {
  private static final long serialVersionUID = 1L;
  protected void doPost(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    // 设置编码
    request.setCharacterEncoding("utf-8");
    //对提交的数据进行处理,保存上传文件
    boolean success = processUpload(request);
    if(success){
      //获取表单text控件的值
      String account = request.getAttribute("account").toString();
      System.out.println(account);
      //获取文件上传的原始名称
      String fileName = request.getAttribute("upfile").toString();
      System.out.println(fileName);
      //获取文件上传后,服务器上保存的名字
      String fileNameServer = request.getAttribute("upfileServer").toString();
      System.out.println(fileNameServer);
      request.setAttribute("upfile", fileNameServer);
      request.setAttribute("message", "上传成功");
    }
    request.getRequestDispatcher("/upload.jsp").forward(request, response);
  }
  private boolean processUpload(HttpServletRequest request) {
    boolean success = true;
    String message = null;
    // 获取文件需要上传到的路径
    String path = request.getServletContext().getRealPath("/upload");
    System.out.println(path);
    // 如果此文件夹不存在,则构造此文件夹
    File f = new File(path);
    if (!f.exists()) {
      f.mkdir();
    }
    // 构造出文件工厂,用于存放JSP页面中传递过来的文件
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // 设置上传文件的保存路径
    factory.setRepository(f);
    // 设置缓存大小,如果文件大于缓存大小时,则先把文件放到缓存中
    factory.setSizeThreshold(1 * 1024 * 1024);
    ServletFileUpload upload = new ServletFileUpload(factory);
    // 设置可以上传文件大小的上界20MB
    upload.setSizeMax(20 * 1024 * 1024);
    try {
      // 可以上传多个文件
      List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
      for (FileItem item : list) {
        // 获取表单的属性名字
        String name = item.getFieldName();
        if (item.isFormField()) {
          String value = item.getString();
          //解决乱码问题
          value = new String(value.getBytes("iso-8859-1"),"utf-8");
          request.setAttribute(name, value);
        } else {
          // 获得文件类型
          String contentType = item.getContentType();
          // 获得文件大小
          long fileSize = item.getSize();
          // 获取路径名
          String value = item.getName();
          // 索引到最后一个反斜杠
          int start = value.lastIndexOf("\\");
          // 截取 上传文件的 字符串名字,加1是 去掉反斜杠,
          String filename = value.substring(start + 1);
          if (filename != null && !filename.trim().equals("")) {
            // 如果上传的文件不是图片,那么不上传
            String allImgExt = ".jpg|.jpeg|.gif|.bmp|.png|";
            String extName = filename.substring(filename.indexOf("."), filename.length());
            if (allImgExt.indexOf(extName + "|") == -1) {
              message = "该文件类型不允许上传。请上传 " + allImgExt
                  + " 类型的文件,当前文件类型为" + extName;
              success = false;
              break;
            }
            request.setAttribute(name, filename);
            // 随机数产生名称
            String newName = System.currentTimeMillis() + extName;
            request.setAttribute(name + "Server", newName);
            // 将文件保存到服务器中
            InputStream in = item.getInputStream();
            // 原文件名
            // OutputStream out = new FileOutputStream(new File(path, filename));
            // 随机数文件名
            OutputStream out = new FileOutputStream(new File(path,
                newName));
            int length = 0;
            byte[] buf = new byte[1024];
            while ((length = in.read(buf)) != -1) {
              out.write(buf, 0, length);
            }
            in.close();
            out.close();
          }
        }
      }
    } catch (FileUploadException e) {
      message = "文件的内容过大,请上传小于20MB的文件" ;
      success = false;
      e.printStackTrace();
    } catch (IOException e) {
      success = false;
      e.printStackTrace();
    }
    request.setAttribute("message", message);
    return success;
  }
}

三丶下载的servlet

package com.test.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/download")
public class FileDownloadAction extends HttpServlet {
  private static final long serialVersionUID = 1L;
  protected void doGet(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    String id = request.getParameter("id");
    // 根据主键读取文件的真实名字 + 服务器上的名字
    processDownload("1444442288605.png", "腾讯.png", request, response);
  }
  private boolean processDownload(String fileName, String saveName,
      HttpServletRequest request, HttpServletResponse response) {
    boolean success = true;
    // 获取文件下载所在的路径
    String path = request.getServletContext().getRealPath("/upload");
    File fileLoad = new File(path, fileName); // 下载文件
    long fileLength = fileLoad.length(); // 文件大小
    byte[] buffer = new byte[1024]; // 缓冲字节数组
    try {
      response.reset();
      response.setHeader("Content-disposition", "attachment;filename=\""
          + new String(saveName.getBytes("gb2312"), "ISO-8859-1") + "\"");
      response.setContentType("application/octet-stream");
      response.setHeader("Content_Length", String.valueOf(fileLength));
      OutputStream os = response.getOutputStream();
      FileInputStream in = new FileInputStream(fileLoad);
      int hasRead = 0;
      while ((hasRead = in.read(buffer)) != -1) {
        os.write(buffer, 0, hasRead);
      }
      os.flush();
      os.close();
      in.close();
    } catch (IOException e) {
      success = false;
      e.printStackTrace();
    }
    return success;
  }
}

以上所述是小编给大家介绍的JavaWeb中上传和下载文件实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • JavaWeb实现文件上传下载功能实例解析

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

  • javaweb上传下载实例完整版解析(下)

    一.显示下载的文件资源 要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFileServlet,用于列出Web应用系统中所有下载文件. 1.1 文件下载页面 download.html代码如下: <!DOCTYPE HTML> <html> <head> <title>下载文件显示页面</title> </head> <

  • JavaWeb文件上传下载功能示例解析

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 1. 上传简单示例 Jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"&g

  • JavaWeb文件上传下载实例讲解(酷炫的文件上传技术)

    一.课程概述 在Web应用系统开发中,文件上传功能是非常常用的功能,今天来主要讲讲JavaWeb中的文件上传功能的相关技术实现,并且随着互联网技术的飞速发展,用户对网站的体验要求越来越高,在文件上传功能的技术上也出现许多创新点,例如异步上传文件,拖拽式上传,黏贴上传,上传进度监控,文件缩略图,大文件断点续传,大文件秒传等等. 本课程需要的基础知识: 了解基本的Http协议内容 基本IO流操作技术 Servlet基础知识 javascript/jQuery技术基础知识 二.文件上传的基础 对于文件

  • JavaWeb中struts2实现文件上传下载功能实例解析

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

  • JavaWeb实现文件上传下载功能实例详解

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 文件上传概述 1.文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 2.文件上传对页面的要求 上传文件的要求比较多,需要记一下: 必须使用表单,而不能是超链接 表单的method必须是POST,而不能是GET 表单的enctype必须是multipart/form-data 在表单中添加file表单字段,即<input ty

  • Javaweb实现上传下载文件的多种方法

    在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-fileupload依赖于commons-io这个包,所以需要下载这两个包commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar. 1.搭建环境 创建Web项目,将包导入到项目lib下 2.实现文件上传 (第一种上传的方法) 新建upload.jsp页面 <

  • javaweb上传下载实例完整版解析(上)

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现,重点在文件上传 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面

  • JavaWeb文件上传下载功能深入分析(二)

    接着上一篇叙述: 二.文件上传与下载 Struts2开发的三板斧,页面jsp-配置文件struts2.xml--还有动作类Action 文件上传前提: form表单的method必须是post form表单的enctype必须是multipart/form-data 提供type="file"的上传输入域 Struts 对文件上传的支持的一些规则 1.单文件上传 开发步骤: 1).在WEB-INF/lib下加入commons-fileupload-1.2.1.jar.commons-i

  • JavaWeb中上传和下载文件实例代码

    一丶先引入上传下载的lib 二丶上传的的servlet package com.test.action; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.servlet.ServletExcepti

  • SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    今天做了文件的上传下载,小小总结一下,基本的web项目建立及SpringMVC框架搭建此处不详细写出来了. 上传form: <form id="uploadfiles" enctype="multipart/form-data"> <input type="file" multiple="multiple" id="file_upload" name="file_upload&q

  • Python使用sftp实现上传和下载功能(实例代码)

    在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能. 1.功能实现 根据输入参数判断是文件还是目录,进行上传和下载 本地参数local需要与远程参数remote类型一致,文件以文件名结尾,目录以\结尾 上传和下载的本地和远程目录需要存在 异常捕获 2.代码实现 #!/usr/bin/python # coding=utf-8 import paramiko import os def sftp_upload(host,port,username,passwo

  • asp.net Web Services上传和下载文件(完整代码)第1/2页

    下面,我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器.一:通过Web Services显示和下载文件 我们这里建立的Web Services的名称为GetBinaryFile,提供两个公共方法:分别是GetImage()和GetImageType(),前者返回二进制文件字节数组,后者返回文件类型,其中,GetImage()方法有一个参数,用来在客户端选择要显示或下载的文件名字.这里我们所显示和下载的文件可以不在虚拟目录

  • Qt实现FTP的上传和下载的实例代码

    为了方便网络编程,Qt 提供了 Network 模块.该模块包含了许多类,本文介绍了Qt实现FTP的上传和下载,分享给大家 本来想简单抄抄书,随便手写个Ftp客户端的,结果发现教材上的是基于Qt4的QFtp类库,而在Qt5中取消了这一个类库(同时也取消了QHttp等的类),取而代之的是QNetworkAccessManager 这个类,把这些杂货全都揽下来了,据说是因为之前的两个类有重复而且效率有问题balabala.于是就百度了一下,发现百度上要么讲的不全,要么就是要去下一个由热心网民重新封装

  • Struts2 控制文件上传下载功能实例代码

    之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Struts贯彻AOP 思想,在下载之前提供对用户权限控制的API. 下面我们将详细介绍上传和下载的相关内容. 一.Struts文件上传机制 想要实现文件上传功能,页面的表单的method属性必须被指定为post,还有enctype属性必须为multipart/form-data,该值表示上传的内容将会以二进

  • php下连接ftp实现文件的上传、下载、删除文件实例代码

    php ftp传送文件到服务器 复制代码 代码如下: <?php // 开始 $ret = ftp_nb_get ($my_connection, "test", "README", FTP_BINARY, filesize("test")); // 或: $ret = ftp_nb_get ($my_connection, "test", "README", // FTP_BINARY, FTP_A

  • 微信语音上传 下载功能实例代码

    假如现在有一个按钮 <div class="inp_btn voice_btn active" id="record"> 按住 说话 </div> 下面就是调用微信jssdk的方法 var recorder; var btnRecord = $('#record'); var startTime = 0; var recordTimer = 300; // 发语音 $.ajax({ url: 'url请求需要微信的一些东西 下面success

  • C#实现文件上传及文件下载功能实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: public ActionResult Upload() { // var pathUrl = "http://" + Request.Url.Authority; var file = Request.Files["Filedata"]; var uploadFileName = file.FileName; string filePath = "/File/" + uploadFileNa

  • 使用smartupload组件实现jsp+jdbc上传下载文件实例解析

    SmartUpload组件只有5个分别是:File.Files.Request.SmartUpload.SmartUploadException类,其中,File代表用户上传的文件,Files代表用户上传的多个文件,Request相当于HttpServletRequest的功能,用于获取表单数据,SmartUpload是最核心的类,负责文件上传下载,SmartUploadException是自定义异常.    SmartUpload的基本使用思路如下: jsp前台代码表单提交 <form act

随机推荐