jsp+servlet实现简单的上传功能下载

作者: _借东西的小人 | 来源:发表于2017-09-19 15:36 被阅读12次

学了才知道,其实,上传与下载并没与我想象中那么难,要想实现上传与下载必须导入下面的包

2.jpg

前端代码

<body>
<!-- 注意:
    可以只写一个servlet页面。其中多写几个方法,用doGet调用
     -->

<!-- 简单的下载 -->
    <a href="FileServlet?option=download&fileName=index.jsp">下载D:/hello.jsp</a>
    
<!-- 简单的上传 -->
<%--上传表单必须是post请求方式,必须有enctype="multipart/form-data" --%>
<form action="FileServlet?option=upload" method="post" enctype="multipart/form-data">
    <input type="file" value="请选择文件"/>
    <input type="submit" value="上传"/>
</form>
</body>

servlet代码

package Servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;

import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

/**
 * Servlet implementation class FileServlet
 */
@WebServlet("/FileServlet")
public class FileServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public FileServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        //获取前台传入的option的值
        String option = request.getParameter("option");
        if("download".equals(option)){
            download(request, response);
        }else if("upload".equals(option)){
            upload(request, response);
        }

        
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
    
    protected void download(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 下载
         */
        //方法一:
        /*String fileName = request.getParameter("fileName");
        System.out.println(fileName);
        //拷贝的文件
        String path = "d:/"+fileName;
        Reader fr = new FileReader(path);
        Writer out = response.getWriter();
        //通过设置响应头,告知准备回复给客户端的本次响应的处理方式和格式、大小等附加信息
        response.setHeader("Content-Disposition", "attachment;filename=\""+fileName+"\"");
        response.setHeader("Content-Type", "text/plain");
        int data = fr.read();
        while(data!=-1){
            out.write(data);
            data = fr.read();
            out.flush();
        }
        out.close();
        fr.close();*/
        //方法二:
        String fileName = request.getParameter("fileName");
//      拷贝的文件
        String path = "d:/"+fileName;
//      读取文件
        FileInputStream in = new FileInputStream(path);
//      输出文件
        OutputStream out = response.getOutputStream();
        //通过设置响应头,告知准备回复给客户端的本次响应的处理方式和格式、大小等附加信息
                response.setHeader("Content-Disposition", "attachment;filename=\""+fileName+"\"");
                response.setHeader("Content-Type", "text/plain");
        int n;
        while((n=in.read())!=-1){
            out.write(n);
        }
        in.close();
        out.close();
    }

    protected void upload(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 上传
         */
         //使用smartupload类实现上传
        SmartUpload  su = new SmartUpload();
        //获取请求页面的资料,初始化上传信息(pageContext)
        // pageContext = _jspxFactory.getPageContext(this, request, response,
            //null, true, 8192, true);
        //是将请求页面index.jsp页面的信息,初始化到smartupload对象中。请求页面中的信息就存到了su对象中
        su.initialize(JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true));
        try {
            //设置不允许上传的类型
            su.setDeniedFilesList("java,txt");
            //设置最大可以上传5MB文件
            su.setMaxFileSize(5*1024*1024);
            su.upload();
            File saveFile = new File("D:/test");
            su.save(saveFile.getPath());
        } catch (SmartUploadException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        //String uname = su.getRequest().getParameter("uname");
    }


}

完整的项目代码已经上传到github中了,其中包括上面说到的要导入的包,访问地址:github

1.jpg

在学习的过程中如果遇到什么问题,欢迎大家提问。

相关文章

  • jsp+servlet实现简单的上传功能下载

    学了才知道,其实,上传与下载并没与我想象中那么难,要想实现上传与下载必须导入下面的包 前端代码 servlet代码...

  • AjaxUpload.js简单使用

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传的简单实现.官网...

  • coscmd文档v1.8.2.15

    功能说明 使用 COSCMD 工具,用户可通过简单的命令行指令实现对对象(Object)的批量上传、下载、删除等操...

  • coscmd文档v1.8.3.0

    功能说明 使用 COSCMD 工具,用户可通过简单的命令行指令实现对对象(Object)的批量上传、下载、删除等操...

  • coscmd文档v1.8

    功能说明 使用 COSCMD 工具,用户可通过简单的命令行指令实现对对象(Object)的批量上传、下载、删除等操...

  • javaer学rust(四)

    之前实现了文件上传下载的功能,这次我们利用go-fastdfs实现一个分片上传的功能,按照惯例,先贴代码 这段代码...

  • ssm(Spring、Springmvc、Mybatis)实战之

    文章大纲 一、课程介绍二、简单功能实现三、图片上传功能实战四、项目源码与资料下载五、参考文章 一、课程介绍 一共1...

  • iOS 中的下载实现

    下载功能是ios 开发中必须掌握的一个功能,今天简单的介绍一下下载功能的实现; 下载功能的实现 每次下载的字节数是...

  • node实现文件上传、下载

    文件上传和下载是项目中必不可少的功能,本文主要介绍如何使用node实现文件上传和下载。 node依赖包:expre...

  • QT5编译使用QFtp

    背景 使用 QNetworkAccessManager 可以实现 Ftp 的上传/下载功能,但它没有提供例如lis...

网友评论

    本文标题:jsp+servlet实现简单的上传功能下载

    本文链接:https://www.haomeiwen.com/subject/ftowsxtx.html