Force download of 'data:text/plain' URL

后端 未结 5 2140
囚心锁ツ
囚心锁ツ 2020-12-01 16:31

I was wondering whether it is possible to force a browser (at least Chrome) to download a data:text/plain URL.

Chrome does download binary URLs (e.g.

相关标签:
5条回答
  • 2020-12-01 17:12

    Here is a pure Javascript solution for creating a text blob and download as text file

    var fileContent = 'This is sample text file';
    var fileName = 'sampleFile.txt';
    
    const blob = new Blob([fileContent], { type: 'text/plain' });
    const a = document.createElement('a');
    a.setAttribute('download', fileName);
    a.setAttribute('href', window.URL.createObjectURL(blob));
    a.click();
    
    0 讨论(0)
  • 2020-12-01 17:13

    What I did was sending the data to a server, which sends them back with the following HTTP header:

    Content-disposition: attachment;filename=test.txt
    

    I don't like this, but it works rather well.

    0 讨论(0)
  • 2020-12-01 17:26

    As of now, it has been made possible to use <a download> in Chrome. Using dispatchEvent, you can download any string as file (even with a custom filename) whenever you want. Here's a utility function to use it:

    var downloadFile = function(filename, content) {
      var blob = new Blob([content]);
      var evt = document.createEvent("HTMLEvents");
      evt.initEvent("click");
      $("<a>", {
        download: filename,
        href: webkitURL.createObjectURL(blob)
      }).get(0).dispatchEvent(evt);
    };
    

    Usage:

    downloadFile("foo.txt", "bar");
    

    It uses jQuery and the webkit prefix, but both can be avoided.

    0 讨论(0)
  • 2020-12-01 17:28

    This works as hell ...

    <div class="tags-style-one dragme" draggable="true" data-transfer="33343">some value is 33343</div>
    
        <script type="text/javascript">
        (function ($) {
            $(document).ready(function () {
            $('.dragme').on("dragstart",function(evt) {
                evt.originalEvent
                        .dataTransfer
                        .setData(
                                "text/plain",
                                $(this).data('transfer').toString()
                        );
            });
        })(jQuery);
    </script>
    
    0 讨论(0)
  • 2020-12-01 17:37

    Try this:

    <a download="file_downloaded_via_data_URL.txt"
    href="data:text/plain;base64,SGVsbG8sIHdvcmxkISBJJ20gZG93bmxvYWRlZCB2aWEgImRhdGE6dGV4dC9wbGFpbjsuLi4iIFVSTCB1c2luZyA8YSBkb3dubG9hZD0iZmlsZV9uYW1lIi4uLj4uDQpNeSBiaXJ0aHBsYWNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY0Njg1MTcvDQoNCk1vcmUgYWJvdXQ6DQpodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sL2xpbmtzLmh0bWwjYXR0ci1oeXBlcmxpbmstZG93bmxvYWQNCmh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWwvbGlua3MuaHRtbCNkb3dubG9hZGluZy1yZXNvdXJjZXMNCg0KQnJvd3NlciBzdXBwb3J0OiBodHRwOi8vY2FuaXVzZS5jb20vZG93bmxvYWQ=">
        Download text file
    </a>
    

    It uses HTML5 attribute download="filename.ext". (no JS needed:)

    More about: http://www.w3.org/TR/html/links.html#downloading-resources

    Browser support can be checked at http://caniuse.com/download

    (As for now, 2013, no IE nor Safari support)

    I think, you can make a fallback for not-supporting browsers: use JS to change value of href="..." to the URL of your server script (which will return the file contents with appropriate HTTP header Content-disposition: attachment;filename=filename.txt).

    0 讨论(0)
提交回复
热议问题