import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import java.io.*;
import java.net.MalformedURLException;
import java.net.URLEncoder;
import java.nio.file.Path;
import java.nio.file.Paths; @RestController
@RequestMapping("file")
public class FileController1 { private static final String directory = "D:/"; /**
* 获取文件列表
*/
@GetMapping("files")
public ResponseEntity<?> list(@RequestParam(required = false) String filename) throws Exception {
final File file = new File(directory, filename == null ? "" : filename);
if (file.isDirectory()) {
return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(buildHtml(file));
} else {
if (file.length() > 5 * 1024 * 1024) {
final String name = file.getName();
return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,
"attachment;filename*=UTF-8''" + URLEncoder.encode(name, "UTF-8")).body(download(file));
} else {
BufferedReader br = new BufferedReader(new FileReader(file));
final StringBuilder sb = new StringBuilder();
String st;
while ((st = br.readLine()) != null) {
sb.append(st).append("\n");
}
return ResponseEntity.ok().header("Content-Type", "text/plain;charset=UTF-8").body(sb.toString());
}
}
} private Resource download(File file) throws MalformedURLException {
final String parent = file.getParent();
final String name = file.getName();
final Path path = Paths.get(parent).resolve(name);
return new UrlResource(path.toUri());
} public String buildHtml(File file) {
final StringBuilder sb = new StringBuilder("<!DOCTYPE html><html lang='zh'><head><meta charset='UTF-8'></head><body><ul>");
final File[] files = file.listFiles();
final String parent = file.getParent();
if (parent != null) {
final String url = parent.substring(directory.length()).replaceAll("[\\\\/]", "%5C");
sb.append("<li><a href='/file/files?filename=").append(url).append("'>· ·</a></li>");
}
if (files != null) {
for (File file1 : files) {
final String filePath = file1.getPath().substring(directory.length());
final String fileUrl = filePath.replaceAll("[\\\\/]", "%5C");
sb.append("<li><a href='/file/files?filename=").append(fileUrl).append("'>").append(file1.getName()).append("</a></li>");
}
}
sb.append("</ul></body></html>");
return sb.toString();
}
}

最新文章

  1. js回顾2
  2. poj1251 最小生成树
  3. 利用PowerDesigner比较2个数据库结构
  4. nginx端口被占用解决方案
  5. 【PHP设计模式 03_JianDanGongChang.php】 简单工厂
  6. iphone获取当前磁盘信息
  7. 重构14-Break&#160;Responsibilities
  8. S - 骨牌铺方格(第二季水)
  9. ES6笔记① var 和 let的区别
  10. JAVA 8 新特性和改进
  11. BootStrap 轮播 Carousel
  12. java 客户端发起http请求
  13. python+selenium 环境搭建以及元素定位
  14. 爬虫(五)requests模块2
  15. hive函数应用之操作json
  16. Django:安装和启动
  17. 设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)
  18. 003之MFCSocket异步编程(指针机制)
  19. asp.net webapi 返回json结果的方法
  20. ArcGIS案例学习笔记-找出最近距离的垂线

热门文章

  1. mysql 根据父id查询下级所有数据
  2. K8S资源控制器
  3. vue 图片分页
  4. Flink 状态后端及RocksDBStateBackend的优势
  5. c++练习270题:三角形个数
  6. 《Toward Fast, Flexible, and Robust Low-Light Image Enhancement》
  7. 音乐下载器,音乐解析软件,全网音乐免费下载,mp3格式音乐下载,flac格式音乐下载,无损音质音乐下载器,你想听的都搜的到~
  8. iframe 父子页面调用vue函数,并解决跨域问题,宽度自适应
  9. 使用Telnet伪造邮件发送
  10. C# 通过程序执行svn更新或提交更改