Java上传文件API汇总

教育行业A股IPO第一股(股票代码003032)

全国咨询/投诉热线:400-618-4000

Fileltem接口用于封装单个表单字段元素的数据,一个表单字段元素对应一个Fileltem对象。为了便于讲解,在此将Fileltem的实现类称为Fileltem类,Fileltem类实现了Serializable接口,因此,支持序列化操作。在FiIeItem类中人素的方法,具体如下。

1.booleanisFormField()方法

isFormField()方法用于判断FileItem类对象封装的数据是一个普通文本表单字段,还是一个文件表单字段,如果是普通表单字段则返回true,否则返回false。

2.StringgetName()方法

getName()方法用于获得文件上传字段中的文件名。如果FileItem类对象对应的是普通表单字段,getName()方法将返回null,否则,只要浏览器将文件的字段信息传递给服务器,getName()方法就会返回一个字符串类型的结果,如“C:\Sunset.jpg”。

需要注意的是,通过不同浏览器上传的文件,获取到的完整路径和名称都是不一样的。例如,用户使用IE浏览器上传文件,获取到的就是完整的路径“C:\Sunset.jpg”,如果使用其他浏览器,比如火狐,获取到的仅仅是文件名,没有路径,如“Sunset.jpg”。

3.StringgetFieldName()方法

getFieldName()方法用于获得表单字段元素描述头的name属性值,也是表单标签name属性的值,例如“name=file1”中的“file1”。

4.voidwrite(Filefile)方法

write()方法用于将Fileltem对象中保存的主体内容保存到某个指定的文件中。如果FileItem对象中的主体内容是保存在某个临时文件中,那么该方法顺利完成后,临时文件有可能会被清除。另外,该方法也可将普通表单字段内容写入到一个文件中,但它主要用于将上传的文件内容保存到本地文件系统中。

5.StringgetString()方法

getString()方法用于将Fileltem对象中保存的数据流内容以一个字符串返回,它有两个重载的定义形式;

(1)publicStringgetString()

(2)publicStringgetString(java.lang.Stringencoding)

在上面重载的两个方法中,前者使用默认的字符集编码将主体内容转换成字符串,后者使用参数指足的子付集编码将主体内容转换成字符串。需要注意的是,如果在读取普通表单字段无系内谷时出现中文乱码现象,请调用第二个getString)方法,并为之传递正确的字符集编码名称。

倘名外Rssicod.sayThelosoninte.emelblaitpait2)moilelsstomolleli

6.StringgetContentType()方法

getContentType()方法用于获得上传文件的类型,即表单字段元素描述头属性“Content-Type”的值,如"image/jpeg”。如果FileItem类对象对应的是普通表单字段,该方法将返回null。

7.booleanislnMemory()方法

isInMemory()方法用来判断FileItem对象封装的数据内容是存储在内存中,还是存储在临时文件中,如果存储在内存中则返回true,否则返回false。

8.voiddelete()方法

delete()方法用来清空FileItem类对象中存放的主体内容,如果主体内容被保存在临时文件中,delete()方法将删除该临时文件。需要注意的是,尽管Fileltem对象被垃圾收集器收集时会自动清除临时文件,但应该及时调用delete()方法清除临时文件,从而释放系统存储资源,以防系统出现异常,导致临时文件被永久地保存在硬盘中。

9.InputStreamgetlnputStream()方法

getInputStream()方法以流的形式返回上传文件的数据内容。

10.longgetSize()方法

getSize()方法返回该上传文件的大小(以子节为单)。

DiskFileltemFactory类用于将请求消息实体中的每一个文件封装成单独的Fileltem对象。如果卜传的文件比较小。将直接保存在内存中,如果上传的文件比较大,则会以临时文件的形式,保存在磁盘的临时文件夹中。默认情况下,文件保存在内存还是硬盘临时文件夹的临界值是10240,即10KB。接下来,首先了解一下DiskFileItemFactory类的两个构造方法:

DiskFileItemFactory()

采用默认临界值和系统临时文件夹构造文件项工厂对象

DiskFileItemFactory(intsizeThreshold,Filerepository)

采用参数指定临界值和系统临时文件夹构造文件项工厂对象

上面DiskFileltemFactory类的两个构造方法,其中,第二个构造方法需要传递两个参数,参数sizeThreshold代表文件保存在内还是磁盘临时文件夹的临界值,参数repository表示临时文件的存储路径。

接下来,针对DiskFileItemFactory类的常用方法进行详细讲解,具体如下所示。

1.Fileltemcreateltem(StringfieldName,StringcontentType,booleanisFormField,StringfileName)方法

该方法用于将请求消息实体创建成Fileltem类型的实例对象。需要注意的是,该方法是FileUpload组件在解析请求时内部自动调用,无须管理。

2.setSizeThreshold(intsizeThreshold)和getSizeThreshold()方法

setSizeThreshold(intsizeThreshold)方法用于设置是否将上传文件以临时文件的形式保存在磁盘的临界值。当Apache文件上传组件解析上传的数据时,需要将解析后的数据临时保存,以便后续对数据进一步处理。由于Java虚拟机可使用的内存空间是有限的,因此,需要根据上传文件的大小决定文件的保存位置。例如,一个800MB的文件,是无法在内存中临时保存的,这时,Apache文件上传组件可以采用临时文件的方式来保存这些数据。但是,如果上传的文件很小,只有600KB,显然将其保存在内存中是比较好的选择。另外,对应的getSizeThreshold()方法用来获取此临界值。

3.setRepository(Filerepository)和getRepository()方法

如果上传文件的大小大于setSizeThreshold()方法设置的临界值,这时,可以采用setRepository()方法,将上传的文件以临时文件的形式保存在指定的目录下。在默认情况下,采用的是系统默认的临时文件路径,可以通过以下方式获取。

System.getProperty("java.io.tmpdir")另外,对应的getRepository()方法用于获取临时文件。

ServletFileUpload类是Apache组件处理文件上传的核心高级类,通过使用parseRequest(HttpServletRequest)方法可以将HTML中每个表单提交的数据封装成个Fileltem对象,然后以List列表的形式返回。接下来,首先看一下ServletFileUpload类的构造方法如下所示:

ServletFileUpload()

构造一个未初始化的ServletFileUpload实例对象

ServletFileUpload(FileItemFactoryfileItemFactory)

根据参数指定的FileItemFactory对象创建一个ServletFileUpload对象

由于在文件上传过程中,FileltemFactory类必须设置,因此,在使用第一个构造方法创建ServletFileUpload对象时,首先需要在解析请求之前调用setFileltemFactory()方法设置fileltemFactory属性。

了解了ServletFileUpload对象的创建,接下来,学习一下ServletFileUpload类的方法,具体如下。

1.setSizeMax(longsizeMax)和getSizeMax()方法

setSizeMax()方法继承自FileUploadBase类,用于设置请求消息实体内容(即所有上数据)的最大尺寸限制,以防止客户端恶意上传超大文件来浪费服务器端的存储空间。其中,参数sizeMax以字节为单位。

另外,对应的getSizeMax()方法用于读取请求消息实体内容所允许的最大值。

2.setFileSizeMax(longfileSizeMax)方法

setFileSizeMax()方法继承自FileUploadBase类,用于设置单个上传文件的最大尺限制,以防止客户端恶意上传超大文件来浪费服务器端的存储空间。其中,参数fileSizeMax是以字节为单位。

另外,对应的getFileSizeMax()方法用于获取单个上传文件所允许的最大值。

parseRequest()方法是ServletFileUpload类的重要方法,它是对HTTP请求消息体内容进行解析的入口。它解析出FORM表单中的每个字段的数据,并将它们分别包装成独立的Fileltem对象,然后将这些Fileltem对象加入进一个List类型的集合对象中返回。

4.getltemlterator(HttpServletRequestrequest)

getItemIterator()方法和parseRequest()方法基本相同。但是getItemIterator()方法返回的是一个迭代器,该迭代器中保存的不是Fileltem对象,而是FileltemStream对象果希望进一步提高性能,可以采用getItemIterator()方法,直接获得每一个文件项的数据输人流,做底层处理;如果性能不是问题,希望代码简单,则采用parseRequest()方法即可。

5.isMultipartContent(HttpServletRequestreq)

isMultipartContent()方法用于判断请求消息中的内容是否是multipart/form-data类型,如果是,则返回true,否则返回false。需要注意的是,isMultipartContent()方法是静态方法,不用创建ServletFileUpload类的实例对象即可被调用。

6.getFileltemFactory()和setFileltemFactory(FileltemFactoryfactory)

这两个方法继承自FileUpload类,分别用于读取和设置fileltemFactory属性。

7.setHeaderEncoding(Stringencoding)方法和getHeaderEncoding()方法

这两个方法继承自FileUploadBase类,用于设置和读取字符编码。需要注意的是,如果没有使用setHeaderEncoding()设置字符编码,则getHeaderEncoding()方法返回null,上传组件会采用HttDServletRequest设置的字符编码。但是,如果HttpServletRequest的字符编码和为null,这时,上传组件将采用系统默认的字符编码。获取系统默认字符编码的方式如下所示:

THE END
1.消息机制第一阶段: 消息发送 第二阶段: 动态方法解析 第三阶段: 消息转发 将消息转发给别人去实现; 如果经历过以上3个阶段objc_msgSend 找不到合适的方法进行调用,会报错unrecognized selector sent to instance; 注:元类对象是一种特殊的类对象; 二、objc_msgSend底层实现: https://www.jianshu.com/p/099ce2e51305
2.面向对象的基本概念面向对象的基本概念有对象、类、抽象、封装、继承、多态、接口、消息、组件、模式和复用等。 1.对象 对象是由数据及其操作所构成的封装体,是系统中用来描述客观事物的一个封装,是构成系统的基本单位,采用计算机语言描述,对象是由一组属性和对这组属性进行操作的一组服务构成。 https://blog.csdn.net/faihung/article/details/76599778
3.java中kafka发消息返回结果kafka发消息写法一:发送的消息对象是字符串 1 创建项目 2 项目结构 3 application.yml 配置文件 4 生产者 KafkaProducerComponent 5 消费者 KafkaConsumerComponent 6 控制器(GET请求发送消息) 7 启动类 8 测试效果 写法二:发送复杂消息对象 1 创建项目 2 项目结构 https://blog.51cto.com/u_16213626/9284004
4.对象存储POST上传对象存储API文档用户除了可以用PUT直接上传对象外,还可以使用POST上传对象。 单次上传对象大小范围是[0, 5GB],如果需要上传超过5GB的大文件,需要通过多段操作来分段上传。 与PUT上传的区别 PUT上传中参数通过请求头域传递;POST上传则作为消息体中的表单域传递。 PUT上传需在URL中指定对象名;POST上传提交的URL为桶域名,无需指定对象https://ecloud.10086.cn/op-help-center/doc/article/64198
5.Java语言程序设计试卷6套A、可提供多种实现方法 B、清楚边界隐藏内部细节 C、分布性 D、有利于复杂对象管理 E、安全和可移植 F、消息驱动 3、Java语言的多态性可以体现在?(正确答案:ABCDF) A、函数的重载 B、不同数据类型之间的合理转换 C、抽象函数和抽象类 D、多个构造函数 E、多个父类 F、派生出不同子类 https://developer.aliyun.com/article/1431557
6.教你3步画好时序图,轻松掌握产品经理都在学的流程分析利器首先,选定要展开分析的用例或目标;接着,分析都有哪些对象、角色参与了实现过程;然后,将它们在实现目标过程中,彼此之间的交互动作,按照时间轴的顺序列出来。 再简单点,就是定目标、找对象、列消息三步走。 1、定目标 画时序图,与活动图一样,要指定某个用例,或目标展开。这些动态视图,是用来描述在静态视图(如用https://www.niaogebiji.com/article-78077-1.html
7.消息分类标准通知消息管理规则推送服务旅游出行类App 便捷生活类App 运动健康类App 音乐类App 游戏类App 摄影类App 版本更新说明 使用入门 开发准备 配置AppGallery Connect 集成HMS实时运动Bundle对象键值 基础能力支持的国家/地区 扩展能力支持的国家/地区 设备接入 说明 运动设备接入开发指南 运动设备接入 有氧健身器材接入 https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/message-classification-0000001149358835
8.面向对象数据模型中的基本概念,如对象消息类继承重载多态消息是对象之间相互请求或相互协作的唯一途径,一个对象必须通过向其他对象发送消息的形式使得其他对象提供各自所能实现的功能。在面向对象的数据模型中,消是对象之间唯一的通信形式,也就是外界能够引用对象操作及获取对象状态的唯一方式,消息分为公有和私有两类,属于同一个对象的消息,其中有些是可由其他对象https://zhidao.baidu.com/question/402910824616679605.html