• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
黄洪波写点东西的地方
博客园    首页    新随笔    联系   管理    订阅  订阅
pdf.js更改所展示的文件名称(转)

https://blog.csdn.net/kangrushuai/article/details/107766612

在文件存储时,为了防止文件名重复,在服务器上存的文件名可能是UUID这种,而非真正的文件名。
使用pdf.js对文件进行预览时,默认会显示存储文件的UUID名字。所以我想对这里进行修改,显示文件的真名字。

两个方法:
1、前端修改,适用于只展示用的,下载时文件名还是uuid的鬼样子。。
2、后端文件流传输时修改
个人推荐第二种方式。

一、前端修改
1、修改源码
需要改动的只有几行代码。
pdf.js的文件包中有一个viewer.js的文件,在viewer.js中找到设置标题文件名的方法:

setTitleUsingUrl(url = ""){
this.url = url;
this.baseUrl = url.split("#")[0];
let title = (0, _ui_utils.getPDFFileNameFromURL)(url, "");
if (!title) {
try {
title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url;
} catch (ex) {
title = url;
}
}
this.setTitle(title);
},
1
2
3
4
5
6
7
8
9
10
11
12
13
把这个方法改为下面这样:

setTitleUsingUrl(url = ""){
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
this.url = url;
var TITLE = localStorage.getItem("filename");
try {
var titleTmp = (TITLE == '' || TITLE == undefined) ? (decodeURIComponent(pdfjsLib.getFilenameFromUrl(url)) || url) : TITLE;
this.setTitle(titleTmp);
} catch (e) {
this.setTitle(url);
}
},
1
2
3
4
5
6
7
8
9
10
11
大概意思就是查找本地存储的key/value值,即文件真名,如果找到了就用真名,没找到就用原名。

2、设置真名
有了第一步,再在调用pdf.js之前把真名字放到本地存储中,就可以了:

localStorage.setItem("filename", data.file_name);//将文件名 放入本地存储

window.open("/static/js/。。。/web/viewer.html?file=" + encodeURIComponent("/file/ShowFile?filePath="+filePath));
1
2
3
二、后端修改
这个就更简单了,在传输文件流时加上一句

response.addHeader("Content-Disposition","attachment;filename=" + downloadFileName);
//downloadFileName是想设置的文件名
1
2
就ok了!

使用第二种方式的话,预览Title和下载时的名字都会被修改,而且会覆盖掉方法一设置的Title。
————————————————
版权声明:本文为CSDN博主「27号白开水」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kangrushuai/article/details/107766612

posted on 2022-01-12 16:34  红无酒伤  阅读(1746)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3