SpringBoot 上传、下载(四)

时间:2023-03-10 01:46:06
SpringBoot 上传、下载(四)

工程目录结构

SpringBoot 上传、下载(四)

完整代码:

1、pom.xml

首先当然是添加依赖,用到thymeleaf模板渲染html页面

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion> <groupId>com.hello</groupId>
<artifactId>HelloBoot</artifactId>
<version>0.0.-SNAPSHOT</version>
<packaging>jar</packaging> <properties>
<project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
</properties> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0..BUILD-SNAPSHOT</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies> <repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories> </project>

如果遇到<parent>标签报错,看看和上面写的有出入吗---

2、application.properties

只有一行,关闭thymeleaf缓存

spring.thymeleaf.cache=false

3、file.html 页面

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body> <h1 th:inlines="text">文件上传</h1>
<form action="fileUpload" method="post" enctype="multipart/form-data">
<p><input type="file" name="filename" /></p>
<p><input type="submit" value="提交" /></p> </form>
<a href="http://localhost:8080/fileDownload">下载</a> </body>
</html>

4、HelloController.java  控制类

package com.hello;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; @Controller
public class HelloController { //映射视图
@RequestMapping("/file")
public String file() {
return "/file";
} //上传
@RequestMapping("fileUpload")
@ResponseBody
public String fileUpload(@RequestParam("filename") MultipartFile file) {
if(file.isEmpty()) {
return "false";
}
//将里面内容移动到目标文本文档
File dest = new File("D:/test.txt");
try {
file.transferTo(dest);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
//下载
@RequestMapping("fileDownload")
@ResponseBody
public String fileDownload(HttpServletResponse res) {
String fileName = "1.jpg";
res.setHeader("content-type", "application/octet-stream");
res.setContentType("application/octet-stream");
res.setHeader("Content-Disposition", "attachment;filename=" + fileName); byte[] buff = new byte[];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = res.getOutputStream();
//获取zhi'ding
bis = new BufferedInputStream(
new FileInputStream(new File("D:/1.jpg")));
int i = bis.read(buff);
while(i != -) {
//每次读取1024字节,就flush输出
os.write(buff, , buff.length);
os.flush();
//然后继续读取下一个1024字节
i = bis.read(buff);
} } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "success";
} }

(1)file()方法return返回的是视图“file.html”,使用@Controller修饰类即可

(2)上传业务方法fileUpload(),return返回的是个字符串——“false“或”success”,不是html视图页面,所以不用渲染视图,

这里使用@Controller修饰类    和    @ResponseBody修饰方法

5、启动类App.java

package com.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App { public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}