IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> spring mvc--文件上传与错误处理 -> 正文阅读

[开发测试]spring mvc--文件上传与错误处理

把用户上传的文件都存放于profiles 文件里

upload-Page.html

<form th:action="@{/upload}" method="post" enctype="multipart/form-data">
	<input type="file" id="file" name="file"/>
	<button type="submit" name="save" th:text="#{submit}">提交</button>
</form>

controller

import org.apache.tomcat.util.htp.fileupload.IOUtils;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springFramework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public static final Resource PICTURES_DIR=new FileSystemResource("./pictures"); //先在pictures目录下创建一个临时文件,java里临时文件只是用于获取文件系统唯一的文件标识符,用户可以自行决定是否要删除
@RequestMapping("upload")
public String uploadPage(){
	return "profile/uploadPage";
}
@RequestMapping(value="/upload",method=RequestMethod.POST)
public String onUpload(MultipartFile file) throws IOException{ //用户提交的数据会以multipartFile接口的形式注入到控制器里,接口提供了一些获取文件名称大小内容的方法
	String filename=file.getOriginalFilename(); //file.getOriginalFilename()是得到上传时的文件名(在IE11/Edge浏览器下面,获取到的路径信息带有盘符)
	File tempFile=File.createTempFile("pic",getFileExtension(filename),PICTURES_DIR.getFile())try(
		InputStream in=file.getInputStream(); //获取输入流之后输出到刚才创建的文件里
		OutputStream out=new FileOutputStream(tempFile)
		){IOUtils.copy(in,out);}
		return "profile/uploadPage";	
}
private static String getFileExtension(String name){
	return name.substring(name.lastTndexOf("."));
}

createNewFile() 方法,根据抽象路径创建一个新的空文件,当抽象路径指定的文件存在时,创建失败,createTempFile(String prefix, String suffix, File directory);
getFileExtension返回文件扩展名
浏览器 采用"multipart/form-data" 的编码方式,可以很容易将表单内的数据和文件放在一起发送
种编码方式先定义好一个不可能在数据中出现的字符串作为 分界符,然后用它将各个数据段分开,而对于每个数据段都对应着 HTML 页面表单 中的一个 Input 区,包括一个 content-disposition 属性,说明了这个数据段的一些信息,如果这个数据段的内容是一个文件,还会有 Content-Type 属性,然后就是数据本身. 我们可以用request.getInputStream()或request.getReader()得到 提交的数据

multipartFile里的getInputStream方法借助了IOUtils.copy方法,可以把流复制到输出流

  • copy能拷贝Integer.MAX_VALUE的字节数据,即2^31-1。
  • 如果是很大的数据,那么可以选择用copyLarge方法,适合拷贝较大的数据流,比如2G以上
    上传的文件不是以静态目录的方式使用的,所以需要采取一些操作在web页面展示,比如图片
    在html里加入展示图片区
<img th:src="@{/uploadedFile}" width="100" height="100"/>

controller里添加获取文件的方法

@RequestMapping(value="/uploadedFile")
public void getUploadedFile(HttpServletResponse response) throws IOException{
	ClassPathResource classPathResource=new ClassPathResource("/images/anonymous.png");
	response.setHeader("Content-Type",URLConnection.guessContentTypeFormName(classPathResource.getFilename()));
	IOUtils.copy(classPathResource.getInputStream(),response.getOutputStream());
}

这段代码把src/main/resources/images/anonymous.png图片写到响应里

管理上传属性

最好通过application.properties文件配置上传目录以及匿名用户图片的路径
1.在新创建的config包里定义一个pictureUploadProperties类

@ConfigurationProperties(prefix="upload.pictures") //告诉springboot以一种类型安全的方式自动映射类路径下所发现的属性(一般是位于application.properties文件里)
public class PictureUploadProperties{
	private Resource uploadPath;
	private Resource anonymousPicture;
	public Resource getAnonymousPicture(){
	return anonymousPicture;
	}
	public void setAnonymousPicture(String anonymousPicture){
		this.anonymousPicture=new DefaultResourceLoader().getResource(anonymousPicture);
	}
	public Resource getUploadPath(){
		return uploadPath;
	}
	public void setUploadPath(String uploadPath){
		this.uploadPath=new DefaultResourceLoader().getResource(uploadPath);
	}
}

之后把pictureUploadProperties添加到配置里

@SpringBootApplication
@EnableConfigurationProperties({PictureUploadProperties.class})
public class MasterSpringMvc4Applicationextends webMvcConfiguerAdapter{//code}

然后在application.properties文件里添加如下属性值

upload.pictures.uploadPath=file:./picturesupload.pictures.anonymousPicture=classpath:/images/anonymous.png

因为使用的是defaultResourceLoader类,所以可以使用像file:或classpath:这样的前缀来指定查找资源的位置,等价于分别创建fileSystemResource和ClassPathResource类

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:46:10  更:2021-08-21 15:46:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 8:37:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码