javaEE利用地方实现文件的上传和下载

本文介绍了在Java EE环境下,使用MVC架构实现文件上传和下载的详细步骤。通过Apache的commons-fileupload组件,结合Servlet配置,创建上传和下载的Servlet,并展示相关界面。文章还提供了关键代码片段和下载链接,帮助开发者快速理解和实现文件操作功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在编写基于mvc架构的javaEE代码时,总是想着如何才能够实现对于文件的上传和下载,今天经过一天的努力,终于实现了文件的上传和下载,在这个地方呢也将自己的编写过程总结出来,希望能够对大家有所帮助,对于源代码我也会不断的改进,那个也会上传,希望能够对大家有所帮助

对于我们javaEE程序员来说,其实文件的上传和下载其实很多的大牛都已经编写好了实现的大部分希捷,那么我们只需用编写代码进行事先就可以了,所以我在这个地方也不懂太多深层次的原理,但是如果你是想着只要会用就可以了,那么希望对你有帮助。好了进入正题

一、文件上传原理分析
1、文件上传的前提:(记住)
a、表单的method必须是post
b、表单的enctype属性必须是multipart/form-data
c、表单中提供

2、form表单的enctype属性
该属性的作用是用来告知服务器,请求正文内容的MIME类型的。相当于请求消息头Content-Type。

1、apache的:commons-fileupload组件。
依赖:commons-io组件
下载地址:http://pan.baidu.com/s/1slUxaHn
2、开发主要的步骤

1:

编写文件上传时需要的上传Servlet类

package cn.edu.nwsuaf.utils;

import java.io.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
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.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;



public class Upload extends HttpServlet {
   
   


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //解决上传文件在存放目录中的乱码问题
        request.setCharacterEncoding("UTF-8");

        response.setContentType("text/html;charset=UTF-8");

        //检测form是否是multipart/form-data类型的
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if(!isMultipart){
            throw new RuntimeException("The form's enctype attribute value must be multipart/form-data");
        }
        //解析请求内容
        DiskFileItemFactory factory = new DiskFileItemFactory();//产生FileItem的工厂
        //指定上传文件的临时文件存放目录,当上传文件的大小大于缓存区的大小就会产生临时存储区
        factory.setRepository(new File("d:/"));//指定临时文件的存放目录
        ServletFileUpload sfu = new ServletFileUpload(factory);

        //如果这两条语句执行的话,那么上传的文件的大小就会受到限制
//      因为此处为了方便,所以没有进行大小的限制
//      sfu.setFileSizeMax(3*1024*1024);//单个文件大小限制
//      sfu.setSizeMax(5*1024*1024);//总文件大小

        List<FileItem> items = new ArrayList<FileItem>();
        try {
            items = sfu.parseRequest(request);
        }catch(FileUploadBase.FileSizeLimitExceededException e) {
            response.getWriter().write("单个文件不能超过3M");
        }
        catch(FileUploadBase.SizeLimitExceededException e) {
            response.getWriter().write("总文件不能超过5M");
        }catch (FileUploadException e) {
            e.printStackTrace();
            throw new RuntimeException("解析请求失败");
        }
        //遍历:
        //因为可能存在多个上传文件表单,所以对于每一个表单的内容要进行一一的处理
        for(FileItem item:items){
            //处理普通字段
            if(item.isFormField()){
                processFormField(item);
            }else{
            //处理上传字段
                processUploadField(item);
            }


        }
        request.getRequestDispatcher("/homework.jsp").forward(request, response);


    }

    protected void processUploadField(FileItem item) {
        try {


//          InputStream in = item.getInputStream();
            //找一个存放文件的位置;存放的文件名
            String fileName = item.getName();//上传的文件的文件名  C:\Users\wzhting\Desktop\a.txt  a.txt(浏览器不同)
            if(fileName!=null&&!fileName.equals("")){

                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值