栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

eclipse/javaweb实现文件的上传和下载/

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

eclipse/javaweb实现文件的上传和下载/

今天学习了servlet实现文件的上传和下载

参考了大佬的文章:
https://www.cnblogs.com/xdp-gacl/p/4200090.html
https://blog.csdn.net/cc1969281777/article/details/82016671

感谢大佬的知识,特以此文章来纪录和回顾学习。

这个学习也包括了servlet的创建和web.XML的设置

开发工具选择的是eclipse

在开始之前,需要下载两个包库

commons-fileupload-1.4.jar 和 commons-io-2.11.0.jar
以上两个包可直接在浏览器中搜索进行下载。

下面是eclipse的文件目录

写到这里被老师叫去搬砖了啊。。。下次继续。。。
回来了,老师刚刚问了我,你是怎么理解container的?一脸懵逼,继续。。。

先是文件的上传
<%@ page language="java" pageEncoding="UTF-8"%>



    
    文件上传



上传者
上传文件

好了之后先创建servlet
src文件夹下面new一个servlet

package servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;

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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;



public class UploadHandleServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try{
            response.setContentType("text/html;charset=utf-8");
//            创建DiskFileItemFactory工厂对象
            DiskFileItemFactory factory=new DiskFileItemFactory();
//            设置文件缓存目录,如果该文件夹不存在则创建一个
            File f=new File("D:\TempFolder");
            if (!f.exists()){
                f.mkdirs();
            }
            factory.setRepository(f);
//            创建ServletFileUpload对象
            ServletFileUpload fileUpload=new ServletFileUpload(factory);
//            设置字符编码
            fileUpload.setHeaderEncoding("utf-8");
//            解析request,将form表单的各个字段封装为FileItem对象
            List fileItems = fileUpload.parseRequest(request);
//            获取字符流
            PrintWriter writer=response.getWriter();
//            遍历List集合
            for (FileItem fileItem:fileItems) {
//            判断是否为普通字段
                if (fileItem.isFormField()){
//                    获取字段名称
                    String name = fileItem.getFieldName();
                    if(name.equals("name")){
//                        如果字段值不为空
                        if (!fileItem.getString().equals("")){
                            String value=fileItem.getString("utf-8");
                            writer.print("上传者:"+value+"
"); } } } else { //获取上传的文件名 String filename=fileItem.getName(); // 处理上传文件 if(filename!=null&&filename!=""){ writer.print("上传的文件名称是:"+filename+"
"); // 保持文件名唯一 filename= UUID.randomUUID().toString()+"_"+filename; String webpath="/upload/"; // 创建文件路径 String filepath=getServletContext().getRealPath(webpath+filename); //创建File对象 System.out.println(filepath); File file=new File(filepath); //创建文件夹 file.getParentFile().mkdirs(); //创建文件 file.createNewFile(); //获取上传文件流 InputStream in=fileItem.getInputStream(); // 使用 FileOutputStream打开服务器端的上传文件 FileOutputStream out=new FileOutputStream(file); // 流的对拷 byte[] bytes=new byte[1024];//每次读取一个字节 int len; // 开始读取上传文件的字节,并将其输出到服务器端的上传文件输出流中 while ((len=in.read(bytes))>0) out.write(bytes,0,len); in.close(); out.close(); fileItem.delete(); writer.print("文件上传成功!"); } } } }catch (Exception e){ throw new RuntimeException(e); } } }

好了之后对web.xml进行配置
直接把下载的servlet的配置也贴上来了


    UploadHandleServlet
    servlet.UploadHandleServlet



    UploadHandleServlet
    /UploadHandleServlet
 


    DownloadServlet
    servlet.DownloadServlet



    DownloadServlet
    /DownloadServlet
 

就ok了,然后,文件上传的文件夹在,
D:eclipseworkspace.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebappsImageupload
这个目录下,供参考。

接下来是文件的下载

D:eclipseworkspace.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebappsImagedownload
首先,创建download,新的文件夹,在里面放入一个文件

下面给出代码,还是使用servlet的技术。

<%@ page language="java" pageEncoding="UTF-8"%>



    
    文件下载


文件下载


package servlet;


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 java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class DownloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //获取文件名
        String filename = request.getParameter("filename");
        //文件所在的文件夹
        System.out.println(filename);
        String folder="/download/";
        //通知浏览器以下载的方式打开
        response.addHeader("Content-Type","application/octet-stream");
        response.addHeader("Content-Disposition","attachment;filename="+filename);
        //通过文件输入流读取文件
        InputStream in=getServletContext().getResourceAsStream(folder+filename);
        OutputStream out=response.getOutputStream();
        byte[] bytes=new byte[1024];
        int len=0;
        while ((len=in.read(bytes))!=-1){
            out.write(bytes,0,len);
        }
    }
}

差不多了,感谢阅读。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/978395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号