`
wx1568520008
  • 浏览: 20347 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

第五节 Spring MVC

 
阅读更多

关于文件上传

关于上传上传操作,Java Web阶段讲解

1.必须使用表单

2.请求必须是POST

3.enctype="multipart/form-data"

注:enctype="multipart/form-data" 注意虽然我们SpringMVC模拟了PUT,那么如果要做上传操作,那么一定使用POST请求

上传的方式,一共两种方式:

1.commons-fileupload-jar、commons-io.jar

2.Servlet3.0上默认提供上传操作:可以自学一下

二阶段如何完成上传操作的步骤:

1.首先判断该请求是否为上传请求

2.获取上传的服务端的绝对路径

3.判断上传目录是否存在,如果不存在则创建

4.构建磁盘工程

5.创建ServletUpload的类

6.解析请求

7.遍历List<FileItem>

8.判断表单中是普通控件还是上传的文件,如果是上传文件

10.获取上传文件的名称

11.获取上传文件的后缀名

12.创建输入输出流

13.传统方式适应流的操作

14.关闭资源

1.SpringMVC的上传操作的配置

<!-- 关于上传文件的配置,id尽量就叫该名不然有错误 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传的编码格式为UTF-8 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 允许上传的最大文件为10M -->
<property name="maxUploadSize" value="10485760"/>
<!-- 设置临时文件夹 -->
<property name="uploadTempDir" value="temp"/>
<!-- 设置缓存 -->
<property name="maxInMemorySize" value="2048"/>
</bean>

2.模拟环境,用户的添加功能,中间包含头像的信息

A.新建表单和上传获取属性测试

h2>用户添加</h2>
<form action="add" method="post" enctype="multipart/form-data">
<input type="text" name="account" placeholder="账号"><br/>
<input type="text" name="password" readonly="readonly" value="123456"><br/>
<input type="text" name="user_name" placeholder="姓名"><br/>
<input type="file" name="myFile">
<input type="submit" value="用户添加操作">
</form>
@RequestMapping(value="/add",method=RequestMethod.POST)
public ModelAndView add(User user,@RequestParam(name="myFile")MultipartFile file){
System.out.println(user);
System.out.println(file.getContentType());//文件类型
System.out.println(file.getName());//表单文件域 name="myFile"
System.out.println(file.getOriginalFilename());//获取上传文件的名称
System.out.println(file.getSize());//获取文件的大小
return null;
}

说明:
1.需要保存到数据库的信息为上传文件的名称,所有在持久化类里面我们定义的是字符串
类型来保存上传文件的名称
2.需要引用commons-fileupload-1.3.1.jar / commons-io-2.4.jar

3.使用输入输出流的方式,完成上传操作!-->>核心代码:

if(!file.isEmpty()){//1.判断文件是否存在
//2.获取服务端的绝对路径
String path = this.session.getServletContext().getRealPath("/upload");
System.out.println("服务器项目的绝对路径-->"+path);
//3.判断该文件夹是否存在,不存在则创建
File folder = new File(path);
if(!folder.isDirectory()){//在文件存在的情况下,才判断是否为文件夹,如果不存在返回的都是false
folder.mkdirs();//创建文件
}
//4.取得上传文件的名称
String fileName = file.getOriginalFilename();
//5.获取上传文件的后缀名
String ext = FilenameUtils.getExtension(fileName);
//6.创建新的文件名称 user.setPhoto(newFileName) 应该保存该名称,存到数据库当中
String newFileName = UUID.randomUUID().toString()+"."+ext;//保证上传文件名称不重复
//7.建立输入输出流
InputStream is = null;
OutputStream os = null;
try {
//8.获取输入流
is = file.getInputStream();
//9.创建文件的输出流
os = new FileOutputStream(path+"/"+newFileName);
//10.输出过程
byte[] b = new byte[1024];//设置读取的字节缓存
int length = -1;
while((length=is.read(b))!=-1){//is.read(b)当读不到数据的时候,返回值为 -1
os.write(b, 0, length);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//11.关闭资源
if(is!=null)is.close();
if(os!=null){
os.flush();
os.close();
}
}

4.SpringMVC内置方法上传 -->>核心代码:

//1.判断该文件是否存在
if(!file.isEmpty()){
//2.获取服务端的绝对路径
String path = this.session.getServletContext().getRealPath("/upload");
//3.判断该文件夹是否存在,不存在则创建
File folder = new File(path);
if(!folder.isDirectory()){//在文件存在的情况下,才判断是否为文件夹,如果不存在返回的都是false
folder.mkdirs();
}
//4.取得上传文件的名称
String fileName = file.getOriginalFilename();
//5.获取上传文件的后缀名
String ext = FilenameUtils.getExtension(fileName);
//7.创建新的文件名称有两种方式
//String newFileName = UUID.randomUUID().toString()+"."+ext;
String newFileName = (new Date()).getTime()+"_"+(new Random()).nextInt(10000)+"."+ext;
//8.创建文件
File newFile = new File(path+"/"+newFileName);
//9.上传操作
try {//file形参中的那个文件 newFile自己重新创建的文件
file.transferTo(newFile);
} catch (Exception e) {//以后如果涉及到这里,我们会有另种方式处理
e.printStackTrace();
}
//10.保存新的文件名称
user.setPhoto(newFileName);
}
System.out.println(user);//余下操作为传递USER对象,到Mapper中执行SQL语句
return null;

4.多文件上传:简单介绍一下

h2>多文件上传</h2>

<form action="more1" method="post" 
enctype="multipart/form-data">
<input type="file" name="myFile">
<input type="file" name="myFile">
<input type="file" name="myFile">
<input type="submit" value="多文件上传">
</form>

使用数组接收数据
@RequestMapping(value = "/more1", method = RequestMethod.POST)
public ModelAndView add(MultipartFile[] myFile) {
return null;

}

5.使用jquery插件完成Ajax文件上传操作

表单:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<meta charset="UTF-8">
<title>胖先生:83604162</title>
<!-- 引入JQuery库 -->
<script type="text/javascript" src="resource/jquery.js"></script>
<!-- 引入Ajax上传插件 -->
<script type="text/javascript" src="resource/jquery.ajaxfileupload.js"></script>
<script type="text/javascript">
$(function(){
$('input[name="myFile"]').ajaxfileupload({//绑定Ajax文件上传事件
'action': 'ajaxUpload',//设置访问路径
'onComplete': function(data) {//data为接收服务端返回的文件名称的值
alert(data);
}
});
 
})
</script>
</head>
<body>
<h2>Ajax上传</h2>
<input type="file" name="myFile">
</body>
</html>

服务端代码:
 
@RequestMapping(value = "/ajaxUpload", method = RequestMethod.POST)
public ModelAndView add(MultipartFile myFile) throws IOException {
   
// 1.判断该文件是否存在
if (!myFile.isEmpty()) {
// 2.获取服务端的绝对路径
String path = this.session.getServletContext().getRealPath("/upload");
System.out.println("服务器项目的绝对路径-->" + path);
// 3.判断该文件夹是否存在,不存在则创建
File folder = new File(path);
if (!folder.isDirectory()) {// 在文件存在的情况下,才判断是否为文件夹,如果不存在返回的都是false
folder.mkdirs();
}
// 4.取得上传文件的名称
String fileName = myFile.getOriginalFilename();
// 5.获取上传文件的后缀名
String ext = FilenameUtils.getExtension(fileName);
// 7.创建新的文件名称
// String newFileName = UUID.randomUUID().toString()+"."+ext;
String newFileName = (new Date()).getTime() + "_" + (new Random()).nextInt(10000) + "." + ext;
// 8.创建文件
File newFile = new File(path + "/" + newFileName);
// 9.上传操作
try {
myFile.transferTo(newFile);
} catch (Exception e) {
e.printStackTrace();
}
// 二阶段传递数据
this.response.setContentType("text/html;charset=UTF-8");
PrintWriter out = this.response.getWriter();
   
out.write(newFileName);
   
out.flush();
out.close();
 
   
}
   
return null;
}


转载于:https://my.oschina.net/courage123/blog/661991

分享到:
评论

相关推荐

    第二章 Spring MVC 增改查实例

    **第二章 Spring MVC 增改查实例** Spring MVC 是 Spring 框架的一个模块,专为构建基于 Web 的应用程序而设计。它提供了一个灵活的架构,用于处理 HTTP 请求、模型视图之间的交互以及与后端数据库的数据操作。在本...

    spring MVC简单示例

    Spring MVC易于与Spring的其他模块(如Spring Data JPA、Spring Security等)集成,也支持与第三方库(如Hibernate、MyBatis等)配合使用,实现强大的Web应用功能。 这个"spring MVC简单示例"是为了帮助初学者理解...

    Spring MVC 第一个例子

    **Spring MVC 框架详解** Spring MVC 是 Spring 框架的一个重要模块,它为构建基于Java的Web应用程序提供了一个强大的模型-视图-控制器(MVC)架构。Spring MVC 的设计允许开发者将业务逻辑、数据处理和用户界面...

    Spring MVC 入门实例

    如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用...

    Spring MVC IDEA版本DEMO

    创建Spring MVC项目的第一步是在IntelliJ IDEA中设置新项目。选择“New Project”,然后在“Project SDK”中选择Java版本。接下来,勾选“Spring Initializr”,并配置以下内容: 1. Group ID:你的组织或公司名。 2...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    5. 整合Spring MVC、Spring和Hibernate,实现数据库操作的自动化。 6. 使用Spring测试框架进行单元测试和集成测试。 通过学习本教程,你将能够熟练地运用这三大框架进行全注解的整合开发,从而提高开发效率,打造出...

    SpringMVCDemo:Spring MVC 框架知识案例

    1.创建第一个 Spring MVC 程序案例 2.Spring MVC @RequestMapping 注解案例 3.Spring MVC 请求参数的获取案例 4.Spring MVC 域对象共享数据案例 5.Spring MVC @ModelAttribute 注解案例 6.Spring MVC 国际化案例 7....

    第一章 Spring MVC 你好spring mvc

    **Spring MVC 概述** Spring MVC 是 Spring 框架的一部分,它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)框架。Spring MVC 提供了一个灵活的架构,允许开发者以多种方式组织和实现业务逻辑。通过解耦...

    Spring Mvc——第一个应用程序

    **Spring MVC —— 第一个应用程序** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了一种模型-视图-控制器(MVC)架构,简化了开发过程,使得开发者可以专注于业务逻辑而不必过于关心...

    第11章Spring MVC常用参数的使用可运行源码 Spring MVC简单应用

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本章中,我们将深入探讨 Spring MVC 的常用参数及其使用,通过可...

    spring mvc入门示例

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。...对于初学者来说,从搭建环境、创建第一个“Hello, World”开始,逐步深入学习各个组件和特性,是掌握Spring MVC的关键步骤。

    编写第一个 Spring MVC 程序

    在本教程中,我们将详细讲解如何编写第一个 Spring MVC 程序,涵盖其核心概念、配置以及实现过程。 1. **Spring MVC 概述** Spring MVC 为 Web 开发提供了模型-视图-控制器(MVC)架构模式,它简化了业务逻辑与...

    spring mvc案例+配置+原理详解+架包

    1. **Hello World**:创建第一个Spring MVC项目,实现简单的“Hello, World!”展示。 2. **表单提交**:处理POST请求,接收并显示表单数据。 3. **RESTful API**:创建RESTful服务,支持GET、POST、PUT、DELETE等...

    《Java EE企业级应用开发教程Spring+Spring MVC+MyBatis》_源代码.zip

    《Java EE企业级应用开发教程Spring+Spring MVC+MyBatis》是一本深入探讨Java企业级应用程序开发的书籍,源代码包含多个章节的实例,旨在帮助读者理解和掌握使用Spring、Spring MVC和MyBatis框架进行实际开发的关键...

    spring3.0 mvc中文实例教程

    2. **创建Hello World应用程序**:引导读者完成第一个简单的Spring MVC应用。 3. **表单处理**:讲解如何在Spring MVC中处理用户输入的表单数据。 4. **Tiles支持与Eclipse插件教程**:介绍使用Tiles布局系统和...

    web一体化:第五讲spring mvc.pptx

    web一体化:第五讲spring mvc.pptx

    第五章 Spring MVC 文件上传

    标题 "第五章 Spring MVC 文件上传" 涉及的核心知识点主要围绕Spring MVC框架中的文件上传功能,这是一个在Web开发中常见的需求,特别是处理用户通过表单提交的文件,如图片、文档等。在这个主题下,我们需要理解...

    SSM(Mybatis + Spring + Spring MVC)整合jar包

    在"SSM(Mybatis + Spring + Spring MVC)框架整合,用于使用SSM框架的项目,必要的都有"这个压缩包中,`lib`目录包含了所有SSM整合所需的jar包,包括Spring、Spring MVC、Mybatis以及数据库驱动等第三方库。...

    spring mvc + spring + hibernate 全注解整合开发视频教程 10

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第十部分将聚焦于实际应用中的细节和优化,旨在帮助开发者构建高效、可维护的Java Web应用程序...

Global site tag (gtag.js) - Google Analytics