当前位置: 首页 > news >正文

pdf文件上传下载记录

一:上传单个pdf文件并用hash重命名及判断文件是不是已经上传过,可以参考hash图片

@PostMapping("/uploadPdfFileSingle")
public String uploadPdfFileSingle(@RequestPart("file") MultipartFile file) {
System.err.println("开始文件上传");
if (file.isEmpty()) {
System.err.println("File cannot be empty");
}
if (!"application/pdf".equals(file.getContentType())) {
System.err.println("Only PDF files are allowed");
}
try {
// 生成文件哈希可以参考图片hash'那篇文章
String fileHash = calculateFileHash(file.getInputStream());

// 处理扩展名
String originalFileName = StringUtils.cleanPath(Objects.requireNonNull(file.getOriginalFilename()));
String fileExtension = originalFileName.contains(".")
? originalFileName.substring(originalFileName.lastIndexOf("."))
: "";

// 使用哈希值作为文件名
String storedFileName = fileHash + fileExtension;

// 创建目录 pdpdf是配置文件配置的根目录
Path uploadPath = Paths.get(pgPdf).toAbsolutePath().normalize();
if (!Files.exists(uploadPath)) {
Files.createDirectories(uploadPath);
}

// 检查文件是否已存在
Path targetLocation = uploadPath.resolve(storedFileName);
if (Files.exists(targetLocation)) {
System.err.println("File is exist"); // 文件已存在
}

// 保存文件
Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
System.err.println(storedFileName);
} catch (IOException ex) {
ex.printStackTrace();
throw new RuntimeException("File storage failed");
}
}

二:对应的下载方法

 @GetMapping("/downLoadPdfFileSingle")
public void downLoadPdfFileSingle(@RequestParam("fileName") String fileName, HttpServletResponse response) throws Exception {

//传的文件名就是上传时打印的文件名storedFileName
File f = new File(pgPdf+fileName);
if (!f.exists()) {
response.sendError(404, "File not found!");
return;
}
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
//下载
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());

OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}

http://www.dtcms.com/a/549549.html

相关文章:

  • 辽阳网站设计中国建设银行的网站.
  • 2. WPF程序打包成一个单独的exe文件
  • 东软专业力考试--Java Web 开发基础
  • 8方向控制圆盘View
  • js中Map和对象{}的区别
  • 基于python构建的低温胁迫实验
  • 服装公司网站修改wordpress后台登陆
  • 2025 Avalonia 技术全景:从版本迭代到生产级落地的成熟之路
  • 做网站却不给客户源代码奥迪互动平台
  • python基础一
  • Burp Suite 代理切换插件
  • 怎么做企业网站推广网站推广方案
  • Jaccard相似度:集合相似性的经典度量
  • 十七、STM32的TIM(八)(TIM输入捕获)
  • c语言笔记 格式化输出函数的使用
  • 网络营销网站建设哪家好北京发布重磅消息
  • 网站设计说明书范文WordPress表情包插件
  • 力扣1. 两数之和
  • Trait 对象与动态分发的权衡:Rust 多态性的代价与收益
  • 基于element-ui二次封装后的组件如何在storybook中展示
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十六)集群部署模块——LVS负载均衡
  • C++面向对象与类和对象之旅(上)----C++重要基础入门知识
  • MR30系列分布式I/O在造型机产线的应用
  • 网站建设优化网站排名河北百度seo点击软件
  • 杭州做网站模板网络搭建基础教程
  • 虚拟机的未来:云计算与边缘计算的核心引擎(一)
  • ​​比亚迪秦新能源汽车动力系统拆装与检测实训MR软件介绍​
  • 仓颉编程(21)扩展
  • 网站建设方案书php做旅游网站
  • 强化网站建设和管理东莞企业建站程序