java中几种上传方法介绍、比较

使用JAVA文件上传的几种方式,java基础面试问题大全及答案大全 在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!大家看完有什么不懂的可以在下方留言讨论也可以关注。在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例[外链图片转存中…(img-AzVnoXXL-1711169855360)] 阅读详情

1 引言

一个网站总是不可避免的要和用户进行信息的交互,倘若是从窗体传送一般的简单输入类型(例如:text、password、radio、checkbox、select等等)的信息到服务器端时,只要使用application/x-www-form-urlencoded的编码方式用session传递就可以了。但是当涉及到和用户之间的文件交换(包括上传和下载)时,就不是那么简单了。在上传文件到服务器时,必须要使用multipart/form-data的编码方式,并且不能直接使用request.getParameter()来取得。至于所使用的方法有很多种,比如:jspsmart公司的jspsmartupload组件,O`Rrilly公司的cos组件,Jakarta Apache公司的commonsFileUpload组件,JavaZoom的uploadbean组件,还有Struts组件中自带的org.apache.struts.upload类工具等等。下面就针对其中的三种解决方案(jspsmartupload、O`Reilly-cos、struts.upload)做一个简单的介绍和对比。

2 O`Rrilly-Cos

Cos组件是O`Rrilly公司开发的,该组件免费,不定期增加新功能,开源。

图1 O`Rrilly-Cos

在Cos组件中,MultipartRequest类主要负责文件上传的处理。MultipartRequest有8个构造函数:

1.Public MultipartRequest ( HttpServletRequest request, String saveDirectory,) throws IOException

2.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException

3.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, FileRenamePolicy policy) throws IOException

4.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding) throws IOException

5.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy) throws IOException

6.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, String encoding) throws IOException

7.Public MultipartRequest ( HttpServletRequest request, String saveDirectory) throws IOException

8.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException

前6种构造函数都是用来专门处理HTTP协议的,saveDirectory是上传文件要存储在服务器端的目录名称;maxPostSize是用来限制用户上传文件大小的,若超过maxPostSzie,会产生IOException,默认上传文件大小是1MB;encoding可以设定用何种编码方式来上传文件名称,可以解决中文问题。

MultipartRequest类工具有8种方法,利用这些方法,我们可以取得请求的相关信息:

Public Enumeration getParameterNames()

可以取得请求参数的名称

public String getParameter(String name)

此方法传回参数为name的值

public String[] getParameterValues(String name)

此方法主要用在取得当一指定参数具有多个值时,它会传回String的数组

public Enumeration getFileName()

传回所有文件输入类型的名称

public String getFilesystemNames(String name)

用此方法得到上传文件的真正的文件名,这里的name指文件输入类型的名称

public String getContentType(String name)

此方法得到上传文件的内容类型

public File getFile(String name)

此方法得到一个文件对象,代表储存在服务器上的name文件

public String getOriginalFileName(String name)

返回文件在修改政策有效之前的文件名

3 jspsmartUpload

Jspsmartupload组件是由jspsmart公司开发的,安装好它的组件以后,就可以处理文件上传及下载的问题。该组件简单好用,免费,但是源码不公开。

Jspsmartupload Overview:

Free  免费的

upload 1or more files to the server  可上传1个或多个文件

upload to a database  上传文件到数据库

control the upload file by file  可以一列一列的(一个个)控制上传

manage mixed forms files +form fields  可以管理表格文件和表格域

download a file  可以实现文件下载

download a database field  可以从数据库中下载

restrict file size , extension etc  可以限制上传文件的尺寸和类型

MacBinary support  MckBinary的支持

Platform: Apache, NT, Unix, Linux, IIS 可以在多种平台上运行

Database : MySQL , Oracle……  支持多种数据库(最支持MySQL)

整个jspsmartupload压缩包113K,包括有范例、API说明和编译好的class文件,调用这些class文件就可以实习文件的上传下载功能。

图2 jspsmartUpoad

Jspsmartupload能实现比O`Rrilly-Cos更多的方法,比如有:

1.public int getSize()方法得到上传文件大小的总和

2.public void setDeniedFilesList(String deniedFilesList)方法设定用户不可上传的类型

3.public void setAllowedFilesList(String allowedFilesList)方法设定用户可上传的文件类型

4.public void setTotalMaxFileSize(Long totalMaxFilesList)设定一次上传文件大小总和

5.public int getCount()得到Files中的文件个数

6.public Boolean isMissing()测试文件是否确实已经存在

7.public String getFieldName()得到此File在前一个HTML文件中的表格名称

8.public String getFilePathName()得到此File在上传端的文件位置

9.public String getFileExt()得到文件的扩展名

………….

Jspsmartupload的安装:只需把这些class文件拷贝到classes文件夹中即可。

4 Jakarta Apache Struts upload

由于本项目是用Struts结构开发的,所以利用Struts自带的类工具实现上传,这能和工程整体结合的很好,不需要导入其他的包,并且功能强大,使用简单,性能稳定且开源,所以无疑是最佳的选择。

下图是Struts中upload包的结构。基本上要实现上传功能,只要用到FormFiles和MultipartRequestHandler接口就可以解决了。

图3  Struts-upload包的结构

基本处理流程是,从页面中传递文件到Form中,然后从Action得到Form中的文件,形成InputStream,然后通过OutputStream写入磁盘。

同样,Struts的upload工具类也可以实现对上传文件大小和类型的控制,可以同时上传多个文件等等。

5 几种方法的比较

 

O`Rrilly-Cos

jspsmartUpload

Struts-upload

是否开源

是

否

是

是否免费

是

是

是

是否继续开发

是

否

不明

功能

一般

多

多

可靠性

高

一般

高

 

 

 

 

特点综述

免费,开源,不定期增加新功能,可靠性高,代码直接写在jsp文件中

简单好用,可上传、下载,功能强大,免费,但是源码不公开,代码直接写在jsp文件中。上传时,文件先预读入内存,当接到save指令时才保存到磁盘,所以上传的性能和文件及内存的大小关系密切。

在Struts中使用极为方便,免费,开源,可靠性高,表示层和业务层分离,有后台的Form和Action

表1 几种上传方法的比较

在研究比较这几种上传组件之后,我认为不管用其中的哪一种都能满足我们的要求,毕竟我们要实现的仅仅是文件上传的功能。最基本的,只要能将文件取得File格式的,就能实现各种各样的功能。

结论是,就本项目而言,使用Struts-upload组件是最贴切的选择;如果要做封装的话,最好选择jspsmartUpload和O`Rrilly-Cos。

一文告诉你:如何在trae中编译运行STM32程序,并让AI帮你修改代码 本文详细介绍了如何将STM32程序从Keil迁移到国产免费工具Trae,并利用AI进行代码修改的全过程。 阅读详情

相关推荐

OpenHarmony v4.1 Release设置应用随系统自动启动

OpenHarmony 4.1 版本中的 Ability Manager Service (AMS) 提供了应用自启动管理功能,允许系统控制哪些应用可以在系统启动时自动运行。这需要以下两个主要步骤:启用系统的自启动管理支持开发一个系统应用来管理自启动配置。

afufufufu的博客 1899

几种上传方法(jspsmart,o`reilly,struts)介绍和比较(原创)

几种上传方法介绍、比较 作者:王智伟2004-10-10目     录1 引言2 O`Rrilly-Cos. 3 jspsmartUpload. 4 Jakarta Apache Struts upload. 5 几种方法的比较  1 引言一个网站总是不可避免的要和用户进行信息的交互,倘若是从窗体传送一般的简单输入类型(例如:text、password、

ghostmanxp的专栏 3008

ILI9488 TFT屏驱动与触摸协同开发指南

TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480

weixin_33814090的博客 149

jspsmart实现文件上传下载

今天弄文件上传的时候正好用到jspsmart实现,于是上网搜了其功能 ,下载地址http://jakarta.apache.org/commons/fileupload/ jspSmartUpload是由www.jspsmart.com 网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点:1、使用简单。在JSP文件中仅仅书写三五行JAV...

gracefulboy的博客 239

企业如何利用群晖 NAS 构建高效数据备份与容灾体系

群晖 NAS 不仅是一个企业级文件存储设备,更是一个完整的数据保护平台。通过 Active Backup for Business、快照技术和多层次容灾方案,企业可以在确保数据安全的同时,实现业务的高可用与持续性。在当今充满不确定性的环境下,企业应将数据备份与容灾体系作为 IT 战略的重要组成部分,而群晖 NAS 则是一个值得信赖的核心基石。

Trihawk的博客 491

基于osgEarth的二维态势中时变对象的绘制方法

在态势系统中,卫星、飞机的轨迹、覆盖等的几何数据随时间改变,称之为时变对象。在以OSGEarth实现的二维态势中,如果利用OSGEarth的预定义线、面类型处理这种几何数据的动态改变,则导致效率极具降低。介绍了此问题并给出解决技巧。

eyepeak的博客 2090

FormData文件上传多文件上传

​ 该防范策略的核心在于攻击者虽然在调用提交接口时能携带相关的cookie信息(接口携带的cookie取决于接口的域名),但是无法通过js获取相关cookie的值(js只能获取当前页面域名下的cookie),因而也就拿不到有效的token,无法构造有效的表单数据,请求就会被服务端所拒绝。​ ③ 前端触发表单提交接口,发送FormData对象,服务端收到请求后,对比FormData对象中的token与服务端存储的token是否一致,如果一致,则认为是合法请求,否则,认为是CSRF攻击,拒绝请求。

zhangyizuishuai的博客 5548

UE5深度图与Mask图渲染实战:从基础到高级应用

本文详细解析了在UE5中渲染深度图与Mask图的完整实战流程。从启用电影渲染队列、配置自定义深度模板通道等前期准备,到构建即用型深度图材质网络与精准物体Mask生成,并深入探讨了二者结合在NPR风格化、程序化雾气及AI工作流(如ComfyUI)中的高级应用,为影视、游戏后期与AI创作提供了高效的解决方案。

weixin_29001419的博客 349

java+addbinarybody,Java Apache HttpClient上传文件时出错

I want to upload a file using HttpClient 4.3.1. I need to add to form multipart an inputstream (to control upload progress.) instead of a File object.This is my code:byte[] dump = ...;HttpClient httpc...

weixin_39788051的博客 470

从零开始学习PX4源码23(飞行模式管理)

本文摘要主要介绍了PX4飞控系统中飞行模式管理模块的代码实现流程。文章从整体架构入手,分析了飞行模式管理模块的启动过程、类继承关系以及核心运行机制。重点阐述了模块从rc.mc_apps启动脚本到FlightModeManager::main()的调用链路,包括任务创建、工作队列初始化和主循环执行流程。核心部分解释了Run()函数如何通过订阅传感器数据、更新参数、处理命令以及生成轨迹设定点来实现飞行模式切换和任务管理功能。文章为理解PX4飞行控制系统的模式切换机制提供了代码层面的详细分析。

陌城烟雨 499

【Python基础】01 如何安装Python及集成环境

本文详细介绍了Python 3.13开发环境的完整搭建流程,涵盖三大操作系统(Windows/macOS/Linux)的Python安装方法、PyCharm专业IDE的配置使用,以及pip包管理工具的应用技巧。内容包括:Python 3.13各系统安装指南、PyCharm社区版与专业版的安装配置、环境验证方法、pip的基本命令与镜像源优化、虚拟环境管理,以及常见问题的解决方案。通过本教程,读者可获得一个高效完备的Python开发环境,为后续编程学习打下坚实基础。

nmdbbzcl的博客 1419

java调用第三方上传文件接口的几种方法

参考:https://blog.youkuaiyun.com/weixin_48027232/article/details/109569260。参考:https://blog.youkuaiyun.com/weixin_44449775/article/details/103628130。参考: https://blog.youkuaiyun.com/qq_40579568/article/details/112173566。第三方接口接受文件的时候,基本是与页面上传的是一致的;这个是使用spring自带的工具类实现的;

qq_39999478的博客 1万+

Claude Code本地Windows安装教程

本文介绍了在Windows系统上安装和配置Claude Code本地调用的详细步骤。首先需要确保网络畅通和账号余额充足,然后安装Node.js v22版本作为基础环境。接着通过npm全局安装Claude Code包,并进行版本验证。安装完成后,使用命令行登录并可以指定模型启动。最后还提供了切换API秘钥的方法,通过setup-token命令重新授权账号。整个过程配有详细的命令行示例和操作截图,方便用户按步骤完成安装配置。

猿小白的博客 2万+

java的几种上传文件方法

java的几种上传文件方法前台配置后台方式一方式二方式三 前台 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> &

fb19801101的专栏 509

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

几种上传方法介绍、比较

转载至 ghostmanxp1 引言一个网站总是不可避免的要和用户进行信息的交互,倘若是从窗体传送一般的简单输入类型(例如:text、password、radio、checkbox、select等等)的信息到服务器端时,只要使用application/x-www-form-urlencoded的编码方式用session传递就可以了。但是当涉及到和用户之间的文件交换(包括上传和下载)时,就不是那

波波的专栏 1165

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java上传文件常见几种方式

1、ServletFileUpload   表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象   ,在由相应的servlet进行处理。 package com.jws.app.operater.service.impl; ...

weixin_30872157的博客 7万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

几种java上传文件简单的写法

在做java web项目时候,大多数情况下有上传文件或者是图片的功能需求,这里介绍的主要是java后台的集中写法,至于判断是否是哪种问价类型或者是是否是图片,前后端都可以,我的做法是前端的上传插件功能很强大,一般就在前端判断了,后台java代码只是辅助的判断就可以了。以下的几个例子也是网上来看到的,自己敲了一遍,有一些收货。 前台代码: <form name="form1" actio...

郭晓冬 1664

记录Java 文件(图片)上传的几种实现

在项目应用中,经常会用到图片或文件上传的功能,需要我们提供接口给web,app,微信或其他系统调用,下面列出几种方式供小伙伴参考: 1、MultipartFile:图片上传在应用中经常会用到MultipartFile来接收,代码如下: @RequestMapping("/imageUpload.do") public Map&lt;String,Object&gt; imageUpload(...

qq_41018959的博客 1万+

Java SpringBoot 上传图片的几种方法

网站上传图片、文件等,最常见的就是直接上传到服务器的webapp目录下,或者直接上传服务的一个指定的文件夹下面。这种方式对于简单的单机应用确实是很方便、简单,出现的问题也会比较少。但是对于分布式项目,直接上传到项目路径的方式显然是不可靠的,而且随着业务量的增加,文件也会增加,对服务器的压力自然就增加了。这里简单的介绍自己所了解的几种方式保存文件。  1. 直接上传到指定的服务器路径;  2. 上传...

java后台, 安卓App, 微信小程序都会, 有需要的可以联系! 1689

几种上传文件组件的性能比较

近两天来由于项目需要使用上传组件,于是我仔细分析了Cos和FileUpload的源代码,并对它们的性能进行了测试比较,使用2M、20M、45M、200M的上传大小测试三种组件所花费的时间(单位为ms)结果是: 2M     第1次 第2次 第3次 第4次 平均 Cos 297 20

从现在起...... 1932

java web批量上传图片_JavaWEB前端上传图片的几种方法

1.表单上传最传统的图片上传方式是form表单上传,使用form表单的input[type=”file”]控件,打开系统的文件选择对话框,从而达到选择文件并上传的目的。web上传图片的几种方法form表单上传表单上传需要注意以下几点:(1).提供form表单,method必须是post。(2).form表单的enctype必须是multipart/form-data。enctype 属性规定在发送...

weixin_42552410的博客 1576

【Java】 比较字符串在Java中的几种方式

字符串比较是Java编程中的基础操作,了解不同的比较方法及其适用场景对于编写健壮和高效的代码至关重要。记住,选择正确的方法将直接影响程序的性能和逻辑的正确性。如果它们相等,则为0;在Java中,字符串比较是一个常见的操作,用于确定两个字符串是否相等或者它们的顺序。Java提供了几种不同的字符串比较方法,每种方法都有其特定的用途和行为。是一个用于比较字符串内容是否相同的方法。如果两个字符串的内容完全相同,那么它们被认为是相等的。> (1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。

baidu_23445983的博客 571

Servlet实现文件上传的几种方法

Servlet实现文件上传的几种方法

qq_44894516的博客 474

Java当中实现分片上传

Java当中实现分片上传

山路曲折盘旋,但毕竟朝着顶峰延伸 4858

java上传文件 获取上传参数_追加java实现上传文件的方法

导jar包上传多个文件的方法/*** 上传多个文件* 传入参数:上传路径(String),上传类型(String数组),文件的map(fileMap)* 返回参数:boolean*/public static boolean uploadFile(String uploadDir,String[] types,HttpServletRequest request){String upPath=up...

weixin_39663258的博客 731
上一篇: O'Reilly总裁提姆-奥莱理:什么是Web 2.0
下一篇: 留一片空白给今天
tom0421
博客等级 码龄25年 6粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值