Javascript 在浏览器中打开时重命名文件

Javascript 在浏览器中打开时重命名文件,javascript,file,Javascript,File,我有如下要求。我使用AngularJS,JavaScript。 1.用户在浏览器中单击文档。我获取文档路径并打开它。>>window.opendocumentpath; 2.但是保存在目录中的文档的文件名被替换为Id,并且没有扩展名。abc/files/4 3.实际文件名在数据库中的Id为:4文件名:Hello.pdf 所以当我打开文件时,我得到了abc/files/4,它没有格式,也没有打开文件 如何打开名为abc/files/Hello.pdf的文件 首先,我想采用abc/files/4路径

我有如下要求。我使用AngularJS,JavaScript。 1.用户在浏览器中单击文档。我获取文档路径并打开它。>>window.opendocumentpath; 2.但是保存在目录中的文档的文件名被替换为Id,并且没有扩展名。abc/files/4 3.实际文件名在数据库中的Id为:4文件名:Hello.pdf

所以当我打开文件时,我得到了abc/files/4,它没有格式,也没有打开文件

如何打开名为abc/files/Hello.pdf的文件

首先,我想采用abc/files/4路径,我不想下载该文件。只需将其存储在本地某个位置,如cache/Temp,以获取文件内容,并将4重命名为Hello.pdf,然后在浏览器中打开它。所有这些都应该发生在后台,当用户单击文件时,应该正确打开文件


可以使用JavaScript、AngularJS吗?请告诉我,出于安全原因,JavaScript通常无法访问本地文件系统

您需要做的是将文件名与HTTP响应一起传递。为此,请将此标题添加到响应:

Content-Disposition: inline; filename="Hello.pdf"
另见:


这将允许您下载带有异步请求的文件,并在base64编码的数据url中打开它。它不会设置名称,只是强制显示为pdf。如果您无法访问服务器,并且无法实现Aaron Digulla方法,则可以使用该方法,因为Aaron Digulla方法比Aaron Digulla方法要好得多

/** * *jquery.binarytransport.js * *@说明。用于发出二进制数据类型请求的jQuery ajax传输。 *@version 1.0 *@作者亨利·阿尔格斯 * */ $.ajaxTransport+二进制、函数选项、原始选项、jqXHR{ //检查blob/arraybuffer响应类型的条件和支持 如果window.FormData&&options.dataType&&options.dataType=='binary'| | | options.data&&window.ArrayBuffer&&options.data instanceof arraraybuffer | | window.Blob&&options.data instanceof Blob{ 返回{ //创建新的XMLHttpRequest 发送:函数头,回调{ //设置所有变量 var xhr=新的XMLHttpRequest, url=options.url, type=options.type, async=options.async | | true, //blob或arraybuffer。默认值为blob 数据类型=options.responseType | | blob, data=options.data | | null, username=options.username | | null, password=options.password | | null; xhr.addEventListener'load',函数{ 变量数据={}; data[options.dataType]=xhr.response; //进行回调并发送数据 callbackxhr.status、xhr.statusText、data、xhr.getAllResponseHeaders; }; xhr.opentype、url、异步、用户名、密码; //设置自定义标题 对于标题中的var i{ xhr.setRequestHeaderi,头[i]; } xhr.responseType=数据类型; xhr.senddata; }, 中止:函数{} }; } }; var blobToBase64=函数blob,cb{ var reader=新文件读取器; reader.onload=函数{ var dataUrl=reader.result; var base64=dataUrl.split','[1]; cbbase64; }; reader.readAsDataURLblob; }; $.ajaxDescription.pdf{ 数据类型:二进制 }.donefunctiondata{ BlobToBase64数据,FunctionBase64编码{ opendata:application/pdf;base64,+base64编码; }; }
您不想下载文件,而是将其存储在文件夹中?正在下载。我不想默认文件格式为pdf。我想从DB中获取实际的文件名和格式,并重命名返回的实际文件。