Cos 文件上传下载

news2024/12/24 21:23:49

目录

方法一:

maven依赖:

UploadServlet 

upload.jsp

 方法二:

maven依赖

UploadServlet

upload.jsp

success.jsp

error.jsp

运行结果:

 百度文件上传插件: Web Uploader


本文通过JSP+Servlet的架构,用cos maven依赖 实现文件的上传与下载。不涉及数据库交互。

方法一:

maven依赖:

    <dependency>
      <groupId>com.jfinal</groupId>
      <artifactId>cos</artifactId>
      <version>2019.8</version>
    </dependency>

UploadServlet 

package com.dong.servlet;

/**
 * 文件上传
 */

import com.oreilly.servlet.MultipartRequest;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.File;
import java.io.IOException;
import java.io.Serial;

@WebServlet("/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Serial
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //模拟服务器上传文件位置-----最好是工程下的相对路径
        String saveDirectory="D:\\JavaWeb_实验作业\\沈立栋_1_2021215725_16周实验";

        File saveDir=new File(saveDirectory);

        if (!saveDir.exists()){
            //如果上传的文件不存在就创建它
            saveDir.mkdirs();
        }

        //文件大小限制:10MB
        int maxPostSize=10*1024*1024;

        /*
          *使用了 MultipartRequest 类,它是一个常用的文件上传类。
          *可以将一个请求中的多个表单字段以及对应的文件上传到服务器的指定目录中。

          *这段代码的作用是解析客户端发送过来的 multipart/form-data 类型的请求,其中:
             ** request 是一个 HttpServletRequest 对象,即客户端发送的请求对象;
             **saveDirectory 是一个字符串,表示要将文件保存到服务器的哪个目录;
             **maxPostSize 是一个 int 类型的整数,表示接收的 HTTP POST 数据的最大字节数;
             **"utf-8" 是一个字符串,表示请求中文参数的编码方式,通常为 UTF-8。
             **执行该代码后,multipartRequest 就可以获取上传的文件和表单数据了。我们可以通过以下方法访问它们:
             **File file = multipartRequest.getFile("fieldName"):返回与指定字段名相应的上传文件;
             **String parameter = multipartRequest.getParameter("fieldName"):返回指定字段名的表单数据。
         */
        MultipartRequest multipartRequest;
        multipartRequest=new MultipartRequest(request,saveDirectory,maxPostSize,"utf-8");

    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

upload.jsp

<%--
  Created by IntelliJ IDEA.
  User: CaptainDong
  Date: 2023/6/14
  Time: 10:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<form action="uploadServlet" method="POST" enctype="multipart/form-data">
    <input type="file" name="file1"/>
    <input type="submit" value="提交" />
</form>
</body>
</html>


 方法二:

    方法一使用了 `com.oreilly.servlet.MultipartRequest` 这个类来实现文件上传功能。但需要注意的是,该类已经被 Apache Commons FileUpload 取代,如果你的 Tomcat 版本较新,可能会出现找不到该类的情况。

推荐使用 Apache Commons FileUpload 来实现文件上传功能。具体实现可以参照以下步骤:
 

maven依赖

    <!--使用 Apache Commons FileUpload 来实现文件上传功能-->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.11.0</version>
    </dependency>

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

UploadServlet

package com.dong.servlet;

import java.io.File;
import java.io.IOException;
import java.io.Serial;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.*;
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("/uploadServlet")
public class UploadServlet extends HttpServlet {
    @Serial
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //模拟服务器上传文件位置-----最好是工程下的相对路径-----但是我这里必须填绝对路径才行
        String saveDirectory="D:\\CS\\Code\\练习项目\\Test_NO.16week\\Demo_16\\src\\main\\fileCollections";

        File saveDir=new File(saveDirectory);

        if (!saveDir.exists()){
            //如果上传的文件不存在就创建它
            saveDir.mkdirs();
        }

        //文件大小限制:10MB
        int maxPostSize=10*1024*1024;

        // 创建 DiskFileItemFactory 工厂类,用于处理以下两种情况:
        // 1. 在内存中的数据大小超过了设置的 sizeThreshold 值,就写入临时文件夹;
        // 2. 某个上传文件的大小超过了设置的 fileSizeMax 值,也会写入临时文件夹。
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setRepository(saveDir); // 设置缓存文件夹
        factory.setSizeThreshold(1024 * 1024); // 设置缓存大小

        // 创建 ServletFileUpload 对象,用于解析请求
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setHeaderEncoding("UTF-8"); // 处理中文编码
        upload.setFileSizeMax(maxPostSize); // 最大文件大小限制

        try {
            // 解析请求,获取所有表单项
            List<FileItem> items = upload.parseRequest(request);

            // 遍历表单项
            for (FileItem item : items) {
                // 是上传文件,而不是普通表单项
                if (!item.isFormField()) {
                    String fileName = item.getName(); // 获取上传文件名
                    String filePath = saveDirectory + "\\" + fileName; // 获取上传文件的完整路径

                    File file = new File(filePath);
                    item.write(file); // 写入磁盘
                } else {
                    String fieldName = item.getFieldName(); // 获取普通表单字段名
                    String fieldValue = item.getString("UTF-8"); // 获取普通表单字段值
                }
            }

            // 上传成功,跳转到成功页面
            response.sendRedirect(request.getContextPath()+"/success.jsp");

        } catch (FileUploadException e) {
            // 上传失败,跳转到错误页面
            response.sendRedirect(request.getContextPath()+"/error.jsp");
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

upload.jsp

<%--
  Created by IntelliJ IDEA.
  User: CaptainDong
  Date: 2023/6/14
  Time: 10:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<form action="uploadServlet" method="POST" enctype="multipart/form-data">
    <input type="file" name="file1"/>
    <input type="submit" value="提交" />
</form>
</body>
</html>

success.jsp

<%--
  Created by IntelliJ IDEA.
  User: CaptainDong
  Date: 2023/6/14
  Time: 11:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta charset="UTF-8">
  <title>文件上传成功</title>
</head>
<body>
<h2>文件上传成功!</h2>
</body>
</html>

error.jsp

<%--
  Created by IntelliJ IDEA.
  User: CaptainDong
  Date: 2023/6/14
  Time: 11:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传失败</title>
</head>
<body>
<h2>文件上传失败,请重试!</h2>
</body>
</html>

当上传成功或失败时,UploadServlet.java 中通过调用 sendRedirect 方法跳转到对应的页面,

// 上传成功,跳转到成功页面 response.sendRedirect(request.getContextPath() + "/success.jsp");

// 上传失败,跳转到错误页面 response.sendRedirect(request.getContextPath() + "/error.jsp");

运行结果:

 


 百度文件上传插件:Web Uploader

这里有一个百度的文件上传: 百度插件:Web Uploader

http://fex.baidu.com/webuploader/

快速开始 - Web Uploader

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 JavaScript 实现【字符串变换最小字符串】【2022Q4 100分】

一、题目描述 给定一个字符串s&#xff0c;最多只能进行一次变换&#xff0c;返回变换后能得到的最小字符串&#xff08;按照字典序进行比较&#xff09;。 变换规则&#xff1a;交换字符串中任意两个不同位置的字符。 二、输入描述 一串小写字母组成的字符串s。 三、输出…

文件系统整体流程介绍

一、什么是文件系统 计算机的文件系统是一种存储和组织计算机数据的方法&#xff0c;它使得对其访问和查找变得容易&#xff0c;文件系统使用文件和树形目录的抽象逻辑概念&#xff0c;用户使用文件系统来保存数据不必关心数据实际保存在硬盘的地址为多少的数据块上&#xff0…

拨云见日:Redis和数据库之间的一致性如何保证?

概 述 Redis在使用过程中&#xff0c;有四个异常问题&#xff1a;缓存穿透、缓存击穿、缓存雪崩、以及缓存和数据库&#xff08;MySQL&#xff09;双写一致性问题。 前三个问题可能会因为业务体量的不同而有所不同&#xff0c;但是最后一个问题是无法避免的。就算你的电商业…

OPNET出现错误的解决办法汇总

文章目录 Packet pointer references unowned packet(<pk_id>) 错误Standard function stack imbalance 错误Invalid Memory Access 错误 在使用 OPNET Modeler 软件时&#xff0c;会遇到很多奇奇怪怪的报错&#xff0c;这篇文章收集的是自己在使用该软件时遇到的一些错误…

易基因:组学研究揭示不同牛品种的DNA甲基化、染色质和基因表达互作机制|科研进展

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 在全球范围内&#xff0c;牛为60多亿人提供了重要的营养来源。传染病是养牛生产的主要限制因素&#xff0c;且许多疾病人畜共患&#xff0c;因此与人类健康直接相关。近年来牛的许多复杂…

CBTC信号系统ATP子系统接口

ATP/ATO车载设备与车辆接口要求 ATP/ATO车载设备应实现与车辆制动装置的可靠接口&#xff0c;保证安全和对列车实施连续有效的控制。 ATP/ATO车载设备与车辆的接口分为开关量、模拟量、通信接口三种。 涉及行车安全的电气接口应采用安全输入&#xff0f;输出接口方式。 ATP…

electron 快速创建一个本地应用

参考官方文档流程 快速入门 | Electron 建议先全局安装electron&#xff0c;npm install -g electron 开发过程中可以在本地开发安装 使用electron快速创建一个web页面 &#xff0c;参考官方demo 实例 electron-quick-start 第一步&#xff1a; mkdir my-electron-app &am…

银行信用卡流失预测模型_基于ANN神经网络_金融培训_论文科研_毕业设计

业务背景 根据央行公布的数据显示&#xff0c;全国性银行信用卡和借贷合一卡的发卡量增速从2017年同比增速26.35%的高点逐年下降&#xff0c;截至2020年同比增速降至4.26%。银行信用卡发卡增速明显放缓的背景下&#xff0c;预防老客户流失的问题变得愈发重要。 假设一家消费信…

前端开发中有哪些鲜为人知的技巧?

下面分享一些前端开发鲜为人知的HTML/CSS/JS技巧&#xff0c;希望大家可以有所收获。 一、Datalist元素 不知道为什么&#xff0c;这个元素不太被人所使用。<datalist>标签被用于为<input>元素提供一个“自动补全”的功能。 例如&#xff1a; <input list&qu…

MMPose安装记录

参考&#xff1a;GitHub - open-mmlab/mmpose: OpenMMLab Pose Estimation Toolbox and Benchmark. 一、依赖环境 MMPose 适用于 Linux、Windows 和 macOS。它需要 Python 3.7、CUDA 9.2 和 PyTorch 1.6。我的环境&#xff1a; Windows 11 Python 3.9 CUDA 11.6 PyTorch 1.13 …

影响客户管理系统的因素有哪些?能买断吗?

客户管理系统是企业数字化转型的必由之路&#xff0c;对于没有部署CRM客户管理系统的企业来说除了关注软件功能还要关注价格&#xff0c;客户管理软件系统多少钱&#xff1f;是否需要买断&#xff0c;今天我们就来说一说。 一、什么是客户管理系统 客户管理系统是帮助企业建立…

经典基于外观的SLAM框架-RTABMAP(RGBD视觉输入方案)

经典基于外观的SLAM框架-RTABMAP 文章目录 经典基于外观的SLAM框架-RTABMAP1. RTABMAP整体框架2.RTABMAP的内存管理机制3. 视觉里程计4. 局部地图5. 回环检测与图优化6. 代码工程实践 1. RTABMAP整体框架 RTABMAP是采用优化算法的方式求解SLAM问题的SLAM框架&#xff0c;本赛题…

Linux---虚拟机配置固定IP

1. IP地址 每一台联网的电脑都会有一个地址&#xff0c;用于和其它计算机进行通讯 IP地址主要有2个版本&#xff0c;V4版本和V6版本&#xff08;V6很少用&#xff0c;课程暂不涉及&#xff09; IPv4版本的地址格式是&#xff1a;a.b.c.d&#xff0c;其中abcd表示0~255的数字…

深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

免费的Outlook邮箱备份的方法!

关于Outlook邮箱备份 Outlook是Microsoft Office微软办公软件套装的组件之一&#xff0c;利用一套Microsoft应用程序和服务&#xff0c;与Office工具共享与协作&#xff0c;和各种设备时刻保持联系。用户可以通过登录邮箱首页申请Outlook为域名后缀的邮箱。 长时间使用Outl…

使用海外社交媒体的九种方法(和五个专业提示!)

社交媒体是推广您的产品、吸引新客户以及围绕您的业务建立社区的有效方式。您可以使用社交媒体做的事情几乎没有限制&#xff0c;但无限的可能性会带来让自己过于分散的风险。好消息是&#xff0c;通过遵循一些最佳实践&#xff0c;您的在线商店可以取得成功。 目录 使用…

3ds MAX 灯光

简单展示一下3dsMAX中灯光的不同效果&#xff1a; 先简单画一个房间出来&#xff0c;展示效果就不添加材质了 在选项卡中添加灯光&#xff1a; 首先是直接渲染的结果&#xff0c;没有添加光照&#xff0c;可以看出也没有阴影等 采用【目标聚光灯】&#xff0c;这有点类似在摄…

【MySQL新手入门系列二】:手把手教你入门MySQL - 数据库及数据表操作

如果您是一位刚刚开始学习MySQL的新手&#xff0c;本文将为您提供一些实用的入门知识和技巧&#xff0c;帮助您快速上手。 【MySQL新手入门系列一】&#xff1a;手把手教你入门MySQL 前面我们已经大致讲了一下mysql的安装等介绍&#xff0c;本篇文章将以windows为例&#xff0c…

聚类分析(文末送书)

目录 聚类分析是什么 一、 定义和数据类型 聚类应用 聚类分析方法的性能指标 聚类分析中常用数据结构有数据矩阵和相异度矩阵 聚类分析方法分类 二、K-means聚类算法 划分聚类方法对数据集进行聚类时包含三个要点 K-Means算法流程: K-means聚类算法的特点 三、k-med…

【JVM系列】垃圾收集器介绍

文章目录 垃圾收集器Serial收集器ParNew收集器Parallel收集器CMS收集器G1收集器 常用的收集器组合 垃圾收集器 Serial收集器 串行收集器是最古老&#xff0c;最稳定以及效率高的收集器&#xff0c;可能会产生较长的停顿&#xff0c;只使用一个线程去回收。新生代、老年代使用…