【问题标题】:Force Download of MP3 in Chrome, Firefox, Safari and IE using Amazon S3使用 Amazon S3 在 Chrome、Firefox、Safari 和 IE 中强制下载 MP3
【发布时间】:2018-07-24 10:39:00
【问题描述】:

有什么方法可以强制从 Amazon S3 下载 MP3 文件。

我的 Razor 中有一个下载按钮:

 <td>
                <a href="@t.S3PreSignedUrl" class="js_recordingDownloadButton document-link btn btn-info btn-block br2 btn-xs fs12 @Html.Raw(t.S3PreSignedUrl.IsNullOrWhiteSpace() ? "disabled" : "")" target="_blank" data-container="body" data-toggle="tooltip" title="@t.OriginalFilename" type="@t.MimeType" download>
                    <span class="fa fa-cloud-download fs12"></span>
                </a>
            </td>

目前,当您点击它时,会打开另一个浏览器窗口并开始使用 Modal 自动播放:

<div id="js_PlayRecordingPopup" class="popup-basic mfp-with-anim modalPopup">
    <div class="panel">
        <div class="admin-form">
            <div class="panel-heading">
                <span class="panel-title">
                    <i class="fa fa-play"></i> Play Recording
                </span>
            </div>
        </div>

        <div class="panel-body bt0 text-center p25">

            <p class="popupInfo fs12 mb5">Playing: <b class="text-info js_playingTitle"></b></p>
            <p class="popupInfo fs12">Filename: <b class="text-info js_playingFileName"></b></p>

            <div class="summaryBox popupSummary text-center audioContainerBox">
                <audio controls controlsList="nodownload" id="audRecording">
                    Your browser does not support the audio element.
                </audio>
            </div>

        </div>

        <div class="panel-footer">
            <div class="text-center">
                <input type="button" class="btn btn-primary" value="Done" data-bind="click: function(){ var sound = document.getElementById('audRecording'); if(sound != undefined) { sound.pause(); sound.currentTime = 0; } $.magnificPopup.close(); }">
            </div>
        </div>
    </div>
    <button title="Close (Esc)" type="button" class="mfp-close" data-bind="click: function(){ var sound = document.getElementById('audRecording'); if(sound != undefined) { sound.pause(); sound.currentTime = 0; }}">×</button>
</div>

有没有办法可以设置它,如果我点击下载,它会立即下载文件?

这是它在源代码中的样子:

<td>
                    <a href="https:url/Audio/Recordings/TES/39e7ca51-1ac8-f395-3ae6-ff814dbde6c3/39e7ca51-e77c-65f1-c88e-47fe20f67ee1/o_1cj5s0tntp3aa1011o51tlrd8ba.mp3?X-Amz-Expires=86400&amp;response-content-disposition=inline%3B%20filename%3Drain-01.mp3&amp;X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=AKIAIOHIWJAIQSFECYZQ/20180724/eu-west-1/s3/aws4_request&amp;X-Amz-Date=20180724T104420Z&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Signature=02a5febff28eed31646a37fea0b8da7d7bcf4b0ffe9a3365d31a0ac3f0b2cabb" class="js_recordingDownloadButton document-link btn btn-info btn-block br2 btn-xs fs12 " target="_blank" data-container="body" data-toggle="tooltip" title="rain-01.mp3" type="audio/mp3" download>
                        <span class="fa fa-cloud-download fs12"></span>
                    </a>
                </td>

【问题讨论】:

  • 问了一遍又一遍。不,您无法更改浏览器决定对文件下载执行的操作。
  • 真的,所以我不能让它强制下载?
  • 不,不是以用户友好的方式(您可以说文件类型未知,因为用户体验很糟糕)。如果可以的话,那将是一个安全问题
  • 好的,谢谢,所以我最好保持原样,在新选项卡中打开文件并播放文件。如果您右键单击播放器,则可以根据需要保存它。
  • 查看 ContentDisposition(在 System.Net.Mime 中),它是一个 http 标头,让浏览器知道如何处理返回值,但是,浏览器完全可以忽略它并处理文件随心所欲。

标签: c# asp.net-mvc amazon-s3 browser http-headers


【解决方案1】:
  1. 您可以将回复中的Content-Type 更改为Content-Type: application/octet-stream。同时还设置Content-Disposition: attachment; filename="filename.mp3"。确保文件名使用RFC 5987中定义的编码

  2. 我看到您已经在 HTML5 上找到了 download 属性,但您没有提供文件名。应该这样使用:

&lt;a href="pathtofile.mp3" download="filename"&gt;

  1. 您可以随时测试由 dandavis 编写的 download.js。如果可行,您可以反转他的代码。

【讨论】:

  • 当您单击下载时,我已经检查了 HTTP 标头,它会在新选项卡中打开,并且 HTML5 播放器会自动启动。标题中有这个:Content-Disposition: inline; filename=rain-01.mp3
  • 同样在download 上,您在技术上不需要提供download="filename" because when you click it the browser loads up a html5 player similar to this: codepen.io/anilbms/embed/IAvkj`
猜你喜欢
  • 2013-02-24
  • 2013-07-18
  • 2011-09-07
  • 2011-02-21
  • 2011-07-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多