ssm上传文件获取路径_SSM实现图片上传下载功能

0. 基本步骤框架搭建

实现带图片上传的注册功能

实现下载功能

1. 框架搭建

Step1 创建开发项目

创建基础MVC包结构:controller、service、mapper、pojo

Step2 导入jar包

导入SpringMVC的jar、Spring的jar、MyBatis的jar、上传文件的jar

Step3 配置文件配置applicationcontext.xml文件

开启service包注解扫描

配置数据库信息properties文件

配置数据源bean

配置SqlSession工厂bean

配置mapper扫描bean,记得把工厂依赖设置为属性注入

配置事务管理

配置springmvc.xml文件

配置controller包注解扫描

配置springmvc 注解驱动

配置静态资源放行

配置文件上传资源解析bean

配置web.xml文件

配置spring配置文件加载路径

配置spring容器资源加载监听器

配置SpringMVC的DispatcherServlet

配置编码过滤器

2. 实现带图片上传的注册功能

基本思路:

Step1 先实现图片的异步上传,反显图片,获取图片上传后的存储路径,

Step2 将注册的数据、头像图片的存储路径一并提交至后台完成注册。

2.1 JS实现图片异步上传

实现思路:

Step1 首先引入jQuery文件

Step2 添加注册按钮单击事件

Step3 获取上传文件数据、利用FormData对象封装数据

Step4 ajax方式提交后台,注意processData设置为false、contentType设置为false

Step5 上传成功后回显图片,将图片路径填至隐藏域

具体JS实现图片上传方法:$(function(

$("#uploadBtn").click(function(){

// 获取上传文件

var uploadPhoto = $("#upload")[0].files[0];

// 利用FormDate对象封装文件数据

var formdata = new FormData();

formdata.append("uploadPhoto",uploadPhoto);

$.ajax({

url:'regUpload',

type:'post',

processData:false,

contentType:false,//设置false,将请求数据类型设置为multipart/form-data

data:formdata,

success:function(data){

if(data.result){

alert("上传成功!");

$("#imageSpan").html("<%=basePath%>%22+data.msg+%22");

$("#imgPath").val(data.msg);

}else{

alert("上传失败!原因:"+data.msg);

}

}

});

});

));

2.2 后台处理上传的图片

实现思路:

1、获取文件在服务器存储中的实际路径

2、获取文件原始文件名,随机生成文件名

3、实际路径拼接随机文件名,将文件存储至目标路径

4、存储文件的原始名、随机名、文件类型至数据库

5、返回上传结果、存储路径+文件名

具体代码如下:@RequestMapping("regUpload")

@ResponseBody

public Result regUpload(MultipartFile uploadPhoto, HttpServletRequest request) throws IOException {

// 业务处理

// 1、获取文件在服务器存储中的实际路径

String realPath = request.getServletContext().getRealPath("/uploadImage/");

File pathFile = new File(realPath);

if(!pathFile.exists()){

pathFile.mkdirs();

}

// 2、获取文件原始文件名,随机生成文件名

String originalFilename = uploadPhoto.getOriginalFilename();

String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

String fileName = UUID.randomUUID()+suffix;

// 3、实际路径拼接随机文件名,将文件存储至目标路径

uploadPhoto.transferTo(new File(realPath+fileName));

// 4、存储文件的原始名、随机名、文件类型至数据库

String contentType = uploadPhoto.getContentType();

PhotoImage photoImage = new PhotoImage("/uploadImage/"+fileName, originalFilename, fileName, contentType );

System.out.println("============================");

int flag = 0 ;

try{

flag =photoImageService.insertImage(photoImage);

}catch (Exception e){

e.printStackTrace();

}

if(flag==1){

// 5、返回上传结果、存储路径+文件名

Result result = new Result(true,"uploadImage/"+fileName);

return result;

}else{

return new Result(false,"图片存储失败!");

}

}

2.3 html页面实现

用户名:
密码:
上传文件:

2.4 实现用户信息注册功能

实现思路:

Step1 用

标签收集页面所有数据

Step2 submit按钮提交至后台

Step3 通过service、mapper存储

具体实现代码:@RequestMapping("regUser")

public String regUser(User user){

// 业务处理

int flag = userService.insertUser(user);

// 请求转发

//return "forward:register.jsp";

return "register";

}

3. 实现图片下载功能

实现思路:

Step1 前台用超链接触发下载功能,将要下载的文件名作为请求参数带上

Step2 后台接收请求,先设置响应头,表明为下载请求:`response.setHeader("Content-Disposition", "attachment;filename="+filenName);`

Step3 获取文件的在硬盘上的绝对路径

Step4 利用FileUtils将文件转成byte数组

Step5 从相应对象中获取输出流,将byte数组写出

Step6 清除输出流的缓存、关闭输出流

具体代码:@RequestMapping("downloadFile")

public void downloadFile(String filename,HttpServletRequest req, HttpServletResponse resp) throws IOException {

// Step2 后台接收请求,先设置响应头,表明为下载请求

resp.setHeader("Content-Disposition", "attachment;filename="+filename);

// Step3 获取文件的在硬盘上的绝对路径

String realPath = req.getServletContext().getRealPath("/uploadImage/");

// Step4 利用FileUtils将文件转成byte数组

File file = new File(realPath,filename);

byte[] bytes = FileUtils.readFileToByteArray(file);

// Step5 从相应对象中获取输出流,将byte数组写出

ServletOutputStream os = resp.getOutputStream();

os.write(bytes);

// Step6 清除输出流的缓存、关闭输出流

os.flush();

os.close();

}

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

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

相关文章

Linux 目录详细说明

文章目录/usr/usr/bin/usr/lib/usr/share/usr/share/man/usr/share/doc/usr/share/zoneinfo/usr/local/usr/local/lib/usr/local/src/usr/src/usr/x11r6/usr/sbin/usr/include/usr/man & /usr/doc & /usr/info/bin/etc/etc/init.d/etc/xinetd.d/etc/X11/etc/rc.d/etc/p…

笔试知识点 网络安全_安全点

笔试知识点 网络安全安全点 Java应用程序中有两个逻辑线程组&#xff1a; 应用程序线程执行应用程序逻辑 执行GC的线程 在执行诸如堆压缩之类的操作时&#xff0c;GC线程会四处移动一些对象&#xff0c;并且这些对象不能被任何应用程序线程使用&#xff0c;因为它们的物理位…

51单片机做web服务器网页,基于51单片机的嵌入式web服务器

单片机 系统设计 编程维普资讯 http://doc.xuehai.net基于 5单片机的嵌入式 w b服务器 1 e基于 5单片机的嵌入式 we服务器 1 b刘东 (南交通大学电气工程学院 )西摘要本文设计实现了一个基于 5单片机的嵌入式 WE l B服务T P I议实现的嵌入式 WE C/P协 B服务器可以使各种家电设备…

stm32f4 hs 电路_电动机控制电路识图一看就懂

点击上方电工电气学习&#xff0c;关注并星标专业的电工电气领域自媒体&#xff0c;不容错过欢迎转发朋友圈&#xff0c;欢迎文末留言本书采用原理图与实物接线图一一对照的形式&#xff0c;讲述了常用机械设备、液位控制的水泵、小型机械设备、供排循环水泵等的电动机控制电路…

isnull mysql_mysql isnull用法讲解

mysql isnull用法讲解 MySQL 可以使用 ISNULL() 函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。 我们先来看几个is null sql用法: select * from newtable where name is null //取得newtable表中name为null值的所有数据 select * from tbas_tablemysql isnull用法讲…

Linux 命令之 file 命令-识别文件类型

文章目录介绍语法格式常用选项参考示例&#xff08;一&#xff09;显示文件类型&#xff08;二&#xff09;显示符号链接的文件类型介绍 file 命令用来识别文件类型&#xff0c;也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型&#xff0c;而不是像…

服务器遍历文件夹不按顺序,绕过遍历检查 (Windows 10) - Windows security | Microsoft Docs...

跳过遍历检查04/19/2017本文内容适用范围Windows 10在比较 Windows 10 版本中了解有关每个 Windows 版本支持哪些特性和功能的详细信息。介绍"绕过遍历检查安全策略"设置的最佳方案、位置、值、策略 管理和安全注意事项 。参考此策略设置确定哪些用户 (或代表用户帐户…

迈克尔 杰克逊mv_杰克逊JSON解析错误– UnrecognizedPropertyException:无法识别的字段,未标记为可忽略[已解决]...

迈克尔 杰克逊mv在解析从我们的一个RESTful Web服务接收到的JSON字符串时&#xff0c;我收到此错误“线程“ main”中的异常com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException&#xff1a;无法识别的字段“ person”&#xff08;类Hello $ Person&#xff09;…

手机版wps怎么制作折线图_手机怎么制作电子签名?有没有手机电子签名软件或者APP?...

手机怎么制作电子签名&#xff1f;有没有手机电子签名软件或者APP&#xff1f;手机制作电子签名非常简单&#xff0c;当然也有移动版的电子签名软件或者APP。根据《电子签名法》第13条规定&#xff1a;电子签名同时符合下列条件的&#xff0c;视为可靠的电子签名&#xff1a;(一…

mysql查看主键别名_MySQL怎么查看约束的别名呢?

old神谕两种常用方法&#xff1a;① show index&#xff0c;其中key_name就是约束名SHOW INDEX IN table_name;(rootlocalhost) [test]> show index in a\G*************************** 1. row ***************************Table: aNon_unique: 1Key_name: idx_idSeq_in_ind…

Linux 命令之 less -- 分屏上下翻页浏览文件内容(查看文件内容/显示文件内容)

文章目录介绍语法格式常用选项浏览文本内容的快捷键向前滚屏向后滚屏跳跃搜索退出 less参考示例&#xff08;一&#xff09;查看文件&#xff08;二&#xff09;ps查看进程信息并通过less分页显示&#xff08;三&#xff09;查看命令历史使用记录并通过less分页显示&#xff08…

ajax.call失效无请求,移动端ajax请求问题?

我有两个问题&#xff0c;一个是我写了一个ajax请求&#xff0c;我想请求我本地服务器上的php文件&#xff0c;直接写本地路径和服务器路径时候&#xff0c;都会报错&#xff0c;告诉我需要跨域&#xff0c;于是我用jsonp去请求数据&#xff0c;写入的是服务器上的地址&#xf…

api网关和esb区别_具有ESB,API管理和Now .. Service Mesh的应用程序网络功能。

api网关和esb区别我最近谈论了微服务模式的演变&#xff0c;以及来自Lyft的Envoy之类的服务代理如何帮助将弹性&#xff0c;服务发现&#xff0c;路由&#xff0c;指标收集等责任推到应用程序下一层。 否则&#xff0c;我们冒着希望并祈祷各种应用程序将正确实现这些关键功能或…

是否可以改变 宏的值_给女人的建议:当父母不同意你的男朋友,可以尝试六个方法...

女生在面对感情婚姻的时候都应该深思熟虑&#xff0c;很多时候考虑问题应该全面一点&#xff0c;在现实生活中&#xff0c;一部分女生在和男朋友谈恋爱的时候&#xff0c;却没有得到父母的同意&#xff0c;甚至父母非常反对&#xff0c;在这个时候女生应该尝试六个方法&#xf…

mysql 存储过程求和_MySQL - 存储过程和函数

MySQL - 存储过程和函数创建和调用存储过程-- 创建stu_group()存储过程&#xff0c;封装 分组查询总成绩&#xff0c;并按照总成绩升序排序的功能-- 注意: DELIMITER 必须写在一行的最前面, 前面不能有空格####DELIMITER $CREATE PROCEDURE stu_group()BEGINSELECT gender,SUM(…

Shell脚本注释

文章目录单行注释多行注释/段注释一、空命令 : 和追加输入重定向 <<解决注释中有反引号的问题方法一方法二方法三方法四方法五二、空命令 : 和 if...then.. 语句三、空命令 : 和单引号 单行注释 直接在行最前端加上符号 # 即可。具体用法如下所示&#xff1a; # this i…

php云服务器买什么系统吗,php云服务器买什么系统

php云服务器买什么系统 内容精选换一换新购买的云硬盘怎么使用云硬盘是网盘吗云硬盘可以单独使用吗云硬盘购买后不使用会收费吗如何停止云硬盘收费如何查看云硬盘详细信息云硬盘的可用区可以变更吗云硬盘是否支持共享盘转非共享盘&#xff0c;普通IO转超高IO云硬盘已退订、误删…

FHS(Filesystem Hierarchy Standard 文件系统层次化标准)

文章目录一、根目录 (/) 的意义与内容二、/usr/ 的意义与内容三、/var/ 的意义与内容四、目录树(directory tree)五、绝对路径与相对路径FHS 是 File System Hierarchy Standard&#xff08;文件系统层次化标准&#xff09;的缩写&#xff0c;多数Linux 版本采用这种文件组织形…

apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

apache.camel从历史上看&#xff0c; Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的&#xff0c;就像您今天所做的那样。 下一代代理Apache ActiveMQ Artemis&#xff08;或仅是Artemis&#xff09;则不是这种情况&#xff0c;后者对大型消息的支…

double小数点后最多几位_用了这么多英语学习APP后,我还是最喜欢这4款

适合系统&#xff1a;安卓、iOS(后台回复「236」获取)学霸君曾经在知乎看到过一个问题&#xff1a;英语近几年会被淘汰吗&#xff1f;现在学英语还有什么用&#xff1f;底下点赞数最多的一个评论&#xff1a;不是英语即将淘汰&#xff0c;而是英语水平差到还需要艰难学英语的人…