[英]How to change a file name and download it when a button is clicked using JavaScript
我有一个用JavaScript创建的下载按钮链接到特定文件。
var strDownloadButton = "<br/><INPUT type="button" value="Download" onclick="add()"/>"
window.location.href = "/images/image1.jpg";
我必须在下载之前将文件image1
重命名为image2
,所以我使用:
<a href="/images/image1.jpg" download="image2" >Download</a>
问题是创建了2个下载按钮(HTML5下载属性再创建1个)。
有没有办法使用JavaScript创建的相同按钮,并参考下载属性?
我不知道你在做什么Brad Christie,
<a id="download" href="Chrysanthemum.jpg" download="image2" >Download</a>
document.getElementById("download").setAttribute("download", "image3")
在这里,您有一个要下载的元素,您将获得该元素并更改其下载属性。
我不是100%肯定它会工作,但我之前做过类似的事情来下载资源并使用javascript重命名它。 但是,它确实意味着资源必须与页面位于同一个域中,否则您将遇到跨域安全问题。 另外,请原谅我正在使用jQuery,但如果你不需要,我会让你查看如何进行跨浏览器的AJAX调用。
照这样说:
<!-- your anchor decorated with data-saveas -->
<a href="/some/image.jpg" data-saveas="image2.jpg">Download</a>
<!-- wiring it up using jQuery/AJAX/Blob -->
<script type="text/javascript">
// Helper to convert AJAX response in to a BLOB
function dataToBlob(data, mimeString){
// convert data to ArrayBuffer
var buffer = new Int8Array(new ArrayBuffer(data.length));
for (var i = 0; i < data.length; i++){
buffer[i] = data.charCodeAt(i) & 0xff;
}
// http://stackoverflow.com/a/15302872/298053
try {
return new Blob([buffer],{type:mimeString});
} catch (e1) {
try {
var BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder;
if (e.name == 'TypeError' && window.BlobBuilder){
bb = new BlobBuilder();
bb.append([buffer.buffer]);
return bb.getBlob(mimeString);
} else if (e.name == 'InvalidStateError'){
return new Blob([buffer.buffer],{type:mimeString});
}
} catch (e2) {
}
}
return null;
}
// iterate over all the items that are marked as saveas
$('a[data-saveas]').each(function(){
var $this = $(this);
// Get the actual path and the destined name
var target = $this.prop('href'),
saveas = $this.data('saveas');
// make an ajax call to retrieve the resource
$.ajax({
url: target,
type: 'GET',
mimeType: 'text/plain; charset=x-user-defined'
}).done(function(data, textStatus, jqXHR){
var mimeString = jqXHR.getResponseHeader('Content-Type'),
blob = dataToBlob(data, mimeString);
if (blob){
// now modfy the anchor to use the blob instead of the default href
var filename = saveas,
href = (window.webkitURL || window.URL).createObjectURL(blob);
$this.prop({
'download': saveas,
'href': href,
'draggable': true
}).data({
'downloadurl': [mimeString, filename, href].join(':')
});
}
});
});
</script>
没有测试,但应该工作。 基本上,您可以使用jQuery获取资源并将其存储到具有指定名称的Blob中。 如果能够这样做,则链接现在变为具有提供名称的自定义命名blob资源。 如果不能保留默认功能,用户需要自己命名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.