springmvc文件上传

使用Jersey跨服务器上传图片 报405 Method Not Allowed错误 springMVC跨服务器上传 报错: HTTP Status 500 – Internal Server Error Type 异常报告 消息 Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:9090/... 阅读详情

1. 文件上传前提

  1. 修改form的默认提交方式
  2. 请求方式必须是post
  3. input 的type必须是file

分析:form默认的请求体为键值对,修改后请求体将分割为不同部分,包含上传文件信息。

  1. 借助第三方组件,解析上传的文件信息。
    1 commons-fileupload
    2 commons-io

2. 实现功能

  1. jsp页面
<form action="/fileUpload" method="post" enctype="multipart/form-data">
名称:<input type="text" name="picname"/><br/>
图片:<input type="file" name="uploadFile"/><br/>
<input type="submit" value="上传"/>
</form>
  1. controller
    ① 首先获取文件的上传位置,文件要放在那里
    拿到项目根目录,如何拿到项目根目录request.getSession().getServletContext().getRealPath("/uploads/");
    ② 创建File对象去操作文件或文件夹,判断路径是否存在,不存在就使用file.mkdirs去创建,如何判断file.exists().
    ③ controller需要接收request,用来获取上传的文件。
    ④ 使用第三方工具解析request,这套东西包含三个对象(DiskFileItemFactory、ServletFileUpload、FileItem)
    ⑤ 创建DiskFileItemFactory
    ⑥ 利用factory去创建ServletFileUpload
    ⑦ upload.paresRequest(request)去解析request,得到FileItem集合
    ⑧ 遍历该集合,判断是否是form上传,item.isFromField()这个方法是判断是不是普通表单项目,否在就是上传文件项。
    ⑨上传文件项,item就是我们上传的文件,获取文件名,使用uuid对文件名命名。
    ⑩uuid的写法
    String uuid = UUID.randomUUID().toString().replace("-","");
    对文件名进行拼接。
    使用item.write(new File(path,filename));
    将文件写入到路径中。
    使用item.delete(),清除临时文件。

2. springmvc上传文件

原理:
上传文件,主要是解析request,获得上传文件项,完成上传,我们上面从⑦ upload.paresRequest(request)获取FileItem,就是获取上传文件项,然后调用item.write(new File(path,filename)),完成上传。
springmvc帮我们获取上传文件项,我们需要配置文件解析器,然后在controller方法参数中使用MultipartFile去接收上传文件项,调用方法完成生产即可。
注意:input 中的name属性的名称,必须与controller方法参数MultipartFile名称相同。

2.1配置文件解析器

导入jar

<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
  1. id:multipartResolver 这个名称不能改
  2. class:CommonsMultipartResolver
bean.xml
<bean id="multipartResolver" <!-- id 的值是固定的-->
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为 5MB --> <property name="maxUploadSize"> <value>5242880</value>
</property>
</bean>
  1. controller中
    ①获取地址,这个地址本案例中使用的是,项目根目录下的地址
    request.getSession().getServletContext().getRealPath("/uploads/");
    得到地址后判断是否存在,如果不存在就创建。
    ②文件名称的问题,先获取文件名称
    upload.getOriginalFilename(),在使用uuid去唯一化名称。
    ③使用upload.transferTo(new File(path,filename))完成上传。
@RequestMapping(value = "/upload02.do")
    public String upload02(HttpServletRequest request, MultipartFile upload)throws Exception{
        String path = request.getSession().getServletContext().getRealPath("/upload/");
        File file = new File(path);
        if (!file.exists()){
            file.mkdirs();
        }
        String filename = upload.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid +"_"+ filename;
        upload.transferTo(new File(path,filename));
        return "success";
    }

jsp

<form action="${pageContext.request.contextPath.toString()}/user/upload02.do" method="post" enctype="multipart/form-data">
    <input type="file" name="upload"/>
    <input type="submit" value="上传文件">
</form>

3. 跨服上传文件

使用的jar

<dependency> 
	<groupId>com.sun.jersey</groupId> 
	<artifactId>jersey-core</artifactId> 
	<version>1.18.1</version> 
</dependency> 
<dependency> 
	<groupId>com.sun.jersey</groupId> 
	<artifactId>jersey-client</artifactId> 
	<version>1.18.1</version> 
</dependency>
  1. srpingmvc的方式去获取文件上传项
    配置CommonsMultipartResolver的bean,id为multipartResolver,controller方法中使用MultipartFile对象去获取文件上传项,input的name属性名称必须与MultipartFile 对象的名称相同。
  2. 拿到文件上传项就可以使用jersey实现跨服上传。
    需要一个路径,和一个文件名称
    先创建对象,
    Client client = Client.create();
    设置路径和文件的名称(localhost:8888/…文件名称.jsp)
    WebResource webResource = client.resource(path+filename);
    上传文件 ,把文件上传项的字节数组传递过去。
    webResource.put(upload.getBytes());
【SpringMVC 】什么是SpringMVC(三)?基于springmvc的文件上传、基于springmvc的拦截器、基于springmvc的邮件发送 @@@@@@@@@@@邮件发送 通过java进行邮件发送,会涉及到两种协议: 1、smtp 简单邮件传输协议 作用:用于指定如何发送邮件 2、pop3 邮局协议版本3 作用:用于指定如何接收邮件 @@@@@@@@我们在进行邮件发送时,首先需要开通邮箱的这两个协议 @@@@@@@@邮件发送的过程 此处,我们以QQ邮箱为例,进行配置,准备工作 登录QQ邮箱,开通smtp,pop3协议 阅读详情

相关推荐

智驾域控制器硬件架构:从接口丛林到算力核心的工程解码

本文深入解析了智驾域控制器硬件架构的设计挑战与工程实践。面对复杂的接口丛林,文章详细探讨了如何高效融合摄像头、雷达等多源传感器数据,并构建以多SOC为核心的强大算力平台。同时,文章强调了电源、时钟、散热等最小系统及车规级可靠性设计的关键作用,为工程师提供了从接口驯服到算力核心协同的完整硬件解码指南。

happy2的博客 482

FileItem类

FileItem类的常用方法       1.boolean  isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。       2.String getName()。getName方法

Smallhorn的专栏 6万+

Device Mapper 代码分析

Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备。DM以块设备的形式注册到Linux内核中,凡是挂载(或者说“映射”)于DM结构下的块设备,不管他们是如何组织,如何通讯,在Linux看来都是一个完整的DM块设备。因此DM让不同组织形式的块设备或者块设备集群在Linux内核面前有一个完整统一的DM表示。一、DM

SonicLing的专栏 1万+

java isformfield_isFormField()这个方法什么意思

展开全部判断某项是否是普抄通的表单2113类zhidao型。在上传版文件时5261用到List list = upload.parseRequest(request);for(FileItem item : list){if(item.isFormField()){//判断该4102表单项是否是普通类型}else{//否则该1653表单项是file 类型的}}扩展资料:define('APP_PA...

weixin_29169505的博客 2759

PCB板质量测试和PCB板

PCB板质量测试和板厂

weixin_51370842的博客 515

S7-1200PLC期末复习题(第七章)

A.0 B.1 C.4 D.-4 A、CV = 0 B、CV = 1 C、CV < 4 D、CV >= 4A、0,0 B、3,0 C、1,1 D、3,1 A、0 B、1 C、先是1,再变为0 D、先是0,再变为1置位输出:常开触点M0.0闭合,Q0.0变为1状态并保存该状态,即使M0.0断开,Q0.0也保持1状态。 复位输出:常开触点M0.1闭合时,Q0.0变为0状态并保持该状态,即使M0.1断开,Q0.0也保持为0状态。 A、1 B、0 C、5 D、10RESET_BF指令需要两个参数,第一个是复位的位数

qq_52251819的博客 4420

图片上传--Jersey实现RESTful接口

上次利用SpringMVC实现图片上传,这个是客户端将图片和其他字段一起上传然后一起处理的。(有什么坏处暂时也没有想到)总之这次的希望能够将图片存储的服务独立出来,暂时用Jersey实现一个接口(老大说按道理应该用WebService来实现,但我在这里没觉得两者有什么不同呀=。=),然后在SpringMVC中将图片提交到Jersey接口,完成存储。 这个是独立出来的图片存储项目结构 con

427

别再折腾Windows了!Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境保姆级搭建指南

本文提供Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境的详细搭建指南,涵盖系统优化、UHD驱动编译、Vivado配置及硬件验证等关键步骤,帮助射频工程师高效构建稳定的开发环境,显著提升FPGA开发效率。

weixin_29168675的博客 255

SpringMVC的文件上传

文件上传客户端表单需要满足:表单项type=“file”表单的提交方式是post表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

楠黎倾风的博客 2万+

【微知】关于GB200 NVL72服务器的一些信息?(36CPU72GPU;LPDDR5X 17T;HBM3e 13.5T;5代NVlink 1.8TB; 720P算力FP8;120Kw)

本文仅根据官网介绍分析,存在纰漏仅供参考。

技术札记 5385

攻防世界GFSJ1184_welcome_CAT_CTF

由于它是 PIE 可执行文件,程序加载地址会随机化,这导致你在 GDB 调试时需要处理地址偏移(如 0x246d 变成 0x55555540246d)。:client 程序通过网络连接(get_nc() 和 get_flag(nc))与 server 通信,server 监听在端口 8888。:client 依赖外部共享库(如 libstdc++.so),因此运行时需要这些库存在系统中。程序就是wasd移动,走到不同标记(* $ @ )下方,输入j回车,会有不同反应。两个文件client和server。

拥抱AI的老粽子 1262

【SpringMVC】SpringMVC实现文件上传

【SpringMVC】SpringMVC实现文件上传1. 传统文件上传2. SpringMVC文件上传3. SpringMVC跨服务器文件上传 form 表单的 enctype 取值必须是: multipart/form-data(默认值是:application/x-www-form-urlencoded) enctype:是表单请求正文的类型 method 属性取值必须是 Post 提供一个...

来日浅谈的博客 376

边缘计算与产业生态系统

目录 文章目录目录边缘计算产业参与者边缘计算产业生态系统 边缘计算产业参与者 边缘计算领域参与者众多,主流公司以打造生态优势为目标,基于自身服务层级向产业链上下两端进行拓展,目前市场主要参与者有: 系统集成商:在产业头部,具有广泛的能力,可以集成不同生态系统公司的产品,具有一定的全球性属性,在边缘计算领域大多由云服务商、电信运营商担任。 云服务商:具有领先的云技术优势与应用生态体系,同时拥有全球性资源布局与市场资源生态,并渴望成为边缘计算主导者。 电信运营商:具有边缘基础设施优势,以及不可替代的

烟云的计算 2102

SpringMVC实现文件上传

1.文件上传之上传原理分析和搭建环境 springmvc文件上传也会用到Javaweb实现文件上传的组件。 1.1文件上传的必要条件 A .form 表单的 enctype 取值必须是:multipart/form-data (默认值是:application/x-www-form-urlencoded) enctype:是表单请求正文的类型 (默认表单提交数据的格式是键值对的方式,比如username=hehe&password=123。但我们把取值改成multipart,会把我们分成几个部分)

Java硬件工程师的博客 2018

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringMVC--文件上传

文件上传是项目开发中最为常用的功能,为了实现文件上传必须将表单的method设置为POST,并将enctype设置为multipart/form-data(默认值是:application/x-www-form-urlencoded)。只有在这种情况下,浏览器才会把用户选择的文件二进制数据发送给服务器,之后再服务器端进行解析。其实web本身就可以使用文件上传功能,我们只需要再from中定义一个file标签(<input type=”file” />)即可。

龙源IT 的博客 740

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringMVC之文件上传

目录 一、SpringMVC与Struts文件上传对比 二、SpringMVC上传文件步骤 1、配置相关依赖 2、springmvc.xml 3、upload.jsp 4、方法代码 三、SpringMVC文件上传需要注意的几点地方 1、需要注意上传界面中的属性。因为是和方法中属性名对应: ​ 2、注意s...

m0_53151031的博客 283

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

springMVC文件上传

文件上传(springMVC)1、利用Maven自动导入jar包2、前端 html 编写3、编写 java 实现4、配置文件 springMVC.xml5、演示(1)进入首页(2)选择文件(3)上传文件成功(4)文件已经在指定文件目录下(5)查看图片(6)再上传一个相同的图片 1、利用Maven自动导入jar包 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fi

weixin_45920385的博客 879

springmvc的文件上传

文章目录一、springmvc的文件上传二、springmvc对json的支持 一、springmvc的文件上传 struts文件上传 1、二进制存在数据库 2、存储到具体的硬盘目录 3、存储到服务器中 真实路径与虚拟路径 通过虚拟路径获取真实路径 request.getservletContext.getrealPath(虚拟路径); fileutil.copyInputStreamtofile...

qiu_hyun的博客 338

Springmvc之文件上传

首先添加相关pom依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </de...

南下在线的博客 144

SpringMVC文件上传

这SpringMVC文件上传前言代码效果图 前言 SpringMVC文件上传与struts的文件上传差不多,可以理解为SpringMVC是他的升级版 回顾一下,以前的方式 1,需要jsp页面 里面写个form表单 < form action=“xxx” method=“post” type=“mutipart/form-data”> < input type=“file” name=“xxx”/> < /form> 2、子控制器FIleUpladAction priva

licmi的博客 202

【springMVC】之文件上传

通过前两篇博客的学习,想必大家对springMVC已经有了一个基本的认识。今天我们主要来学习一下springMVC两种文件上传的方式。我们通过比较发现,通过解析器上传文件不仅代码比通过字节流上传简单好多,而且上传的效率也快好多。通过两种方式上传文件,不知道你了解没有。对比二者的优劣,在实际的项目中有选择的进行取舍。好了,今天关于springMVC上传文件的博客就写到这里。最近在用springMVC+ejb做ITOO的项目,对springMVC和EJB的结合感触特别多,以后会慢慢更新相应的博客。欢迎大家在下方

不忘初心 1898

springmvc 文件上传

Springmvc 实现文件上传的三种途径: 这篇文章是基于Intellij的maven项目; 导入jar包: dependency> groupId>com.liferaygroupId> artifactId>org.apache.commons.fileuploadartifactId> version>1.2.2.LIFERAY-PATCHED-1version> d

summer_rain的博客 293

六、SpringMVC文件上传

SpringMVC文件上传1. 文件上传1.1 文件上传客户端三要素1.2 文件上传原理1.3 单文件上传步骤1.4 单文件上传实现1.5 多文件上传实现 1. 文件上传 1.1 文件上传客户端三要素 表单项 type = “file” 表单的提交方式是 post 表单的 enctype 属性是多部分表单形式,即 enctype = “multipart/form-data” 1.2 文件上传原理 1.3 单文件上传步骤 导入fileupload和io坐标 配置文件上传解析器 编写文件上传代码

Challenger_的博客 387
上一篇: springmvc页面跳转
下一篇: springmvc的拦截器
RestartJava
博客等级 码龄7年 1粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值