例如,如果您点击链接:
data:application/octet-stream;base64,SGVsbG8=
浏览器将提示您下载一个文件,该文件由超链接本身中作为base64保存的数据组成.有没有办法在标记中建议默认名称?如果没有,是否有JavaScript解决方案?
那么我使用以下代码来呈现从webservice作为base64字符串返回的PDF.
<html>
<object data="data:application/pdf;base64,{!pdfStampingResponse.pdfBase64}" type="application/pdf" width="100%" class="internal">
<param name="view" value="fitH" />
</object>
</html>Run Code Online (Sandbox Code Playgroud)
这很好但我想在用户尝试保存文件时设置下载文件名.不知何故,我无法找到一个有效的解决方案.知道怎么做吗?
在我的Vue应用程序中,我收到PDF作为blob,并希望使用浏览器的PDF查看器显示它.
我将其转换为文件,并生成一个对象url:
const blobFile = new File([blob], `my-file-name.pdf`, { type: 'application/pdf' })
this.invoiceUrl = window.URL.createObjectURL(blobFile)
Run Code Online (Sandbox Code Playgroud)
然后我通过将该URL设置为data对象元素的属性来显示它.
<object
:data="invoiceUrl"
type="application/pdf"
width="100%"
style="height: 100vh;">
</object>
Run Code Online (Sandbox Code Playgroud)
然后,浏览器使用PDF查看器显示PDF.但是,在Chrome中,我没有使用我提供的文件名(此处为my-file-name.pdf):我在PDF查看器的标题栏中看到一个哈希值,当我使用"右键单击"下载文件时- >另存为...'或查看器的控件,它使用blob的哈希(cda675a6-10af-42f3-aa68-8795aa8c377d或类似)保存文件.
浏览器和文件名的工作方式与我在Firefox中所希望的一样; 它只是不使用文件名的Chrome.
有没有办法,使用原生Javascript(包括ES6,但没有Vue以外没有第三方依赖),为Chrome中的blob/object元素设置文件名?
[edit]如果有帮助,则响应具有以下相关标头:
Content-Type: application/pdf; charset=utf-8
Transfer-Encoding: chunked
Content-Disposition: attachment; filename*=utf-8''Invoice%2016246.pdf;
Content-Description: File Transfer
Content-Encoding: gzip
Run Code Online (Sandbox Code Playgroud) 我正在调用Web服务以生成.pdf,然后使用createObjectURL和iframe进行打印和显示:
var title = "Claim-" + this.claimNumber + "-" + new Date() + ".pdf";
var blob = new Blob([wsRequest.response], { type: 'application/pdf' });
blob.name = title;
if (browser() === 'IE') {
window.navigator.msSaveOrOpenBlob(blob, title);
} else {
var fileURL = URL.createObjectURL(blob);
var win = window.open();
win.document.write('<iframe name="' + title + '" src="' + fileURL + '" frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen></iframe>');
win.document.title = title;
Run Code Online (Sandbox Code Playgroud)
对于IE来说,它的工作原理非常好:.pdf出现在Acrobat Reader中,它可以显示,我可以打印...并且它的文件名“有意义”。
对于Chrome /嵌入式.pdf查看器,它也可以正常运行:它显示在自己的标签中,并且该标签具有“有意义的文件名”。
但是,如果Chrome在Acrobat Reader中显示图像,请执行以下操作:
a)我得到一个新的空白标签(带有“有意义的名称”)
b)Acrobat显示一个GUID-由createObjectURL()分配的GUID:
示例:“ blob:http://192.168.116.170 …
我想使用html5和javascript或jquery从chrome(所有版本)写入任何文件的txt.
我尝试过FileSystem API,我试过的代码是:
function onFs(fs) {
console.log('test');
fs.root.getFile('log.txt', {create: true, exclusive: true},
function(fileEntry) {
// fileEntry.isFile === true
// fileEntry.name == 'log.txt'
// fileEntry.fullPath == '/log.txt'
fileEntry.getMetaData(function(md) {
console.log(md.modificationTime.toDateString());
}, onError);
},
onError
);
}
window.webkitRequestFileSystem(TEMPORARY, 1024*1024 /*1MB*/, onFs);
但不行.
有没有办法写入文件?
特定
var data = new Array(1000000);
for (var i = 0; i < data.length; i++) {
data[i] = 1;
}
var blob = new Blob([data]);
Run Code Online (Sandbox Code Playgroud)
哪个是存储的数组的二进制数据表示?
我可以在新窗口中获取 pdf,其 URL 为
htts://mydomainname/410-8d9c-4883-86c5-d76c50a24a1d
Run Code Online (Sandbox Code Playgroud)
我想删除生成的 URL 中自动生成的 blob 名称 (410-8d9c-4883-86c5-d76c50a24a1d) 并将我的自定义名称链接放在下面
htts://mydomainname/filename
Run Code Online (Sandbox Code Playgroud)
我需要对下面的代码进行哪些修改
var file = new Blob([response], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
$window.open(fileURL);
Run Code Online (Sandbox Code Playgroud) 在我的博客上,可以收听广播频道,可以是现场直播,也可以是按时间表收听频道存档中的先前广播。
我希望访问者能够使用其独特的节目名称保存这些较旧的广播。当访问者单击给定的时间戳时,适当的或适当参数化的 URL 将加载到 HTML5 音频对象的源中。
有两种 URL 格式,第一种仅适用于当天:http://example.com/20190707080000/20190707090000/channel1.mp3
在这种情况下,我可以利用以下 hack:而不是最新的 URL,我将以下 URL 加载到音频播放器中:http://example.com/20190707080000/20190707090000/channel1.mp3/Title_of_the_programme.mp3
在这种情况下,访问者将能够通过给定的文件名保存收听的节目:“Title_of_the_programme.mp3”。
其他日子的其他 URL 与当天不同,因为这些节目已经存档,可能采用较低的比特率和/或格式: http: //example.com/2019/07/06/channe11。 mp4?start=28800&end=32400 “start”和“end”参数适用于一天中给定的第二秒,即实际程序开始和结束的时间。
在第二种情况下,上述黑客不再起作用,因此我无法将类似的 URL 加载到 HTML5 音频播放器中: http://example.com/2019/07/06/channel1.mp4 ?start=28800&end =32400/节目标题.mp4
不幸的是,它不起作用,当我单击 HTML5 音频播放器的“另存为”按钮时,文件名始终是“channel1.mp4”,这是次优的。
在这两种情况下,针对 GET 请求都会立即提供完整的程序。
由于浏览器的同源策略,HTML“A”元素的“download”属性、“a[download]”或 HTML5“audio”元素的相同属性也不起作用:无线电的域是当然与我的博客域不同。
由于同源策略,使用 Ajax 调用 (XMLhttprequest) 将生成的媒体文件提取到浏览器 blob 中也不起作用。无线电服务器当然不会为这些 Ajax 调用提供适当的标头字段:“Access-Control-Allow-Origin: *”。
广播节目 URL 的响应标头不包含“content-disposition”标头字段,因此文件名必须由 URL 本身确定。
我的 angular 应用程序有一个呈现 PDF 的 iframe:
<iframe ng-src="{{PCtrl.docSrc}}" type="application/pdf" ...></iframe>
Run Code Online (Sandbox Code Playgroud)
docSrc 生成为 BASE64 编码的字符串,类似于:
"data:application/pdf;base64,JVBERi0xLjMKMyA..."
Run Code Online (Sandbox Code Playgroud)
Chrome 可以很好地呈现嵌入的 PDF。可以单击下载来下载 PDF,用户将看到一个“另存为”对话框。Chrome PDF 查看器给出的默认文件名是“download.pdf”,我该如何更改?