我使用亚马逊S3来放mp3文件,然后让我们的网站访问者从亚马逊AWS下载MP3。我使用S3Fox来管理文件,一切似乎都正常工作,直到最近我们收到很多来自访问者的抱怨,说mp3是通过浏览器流式传输的,而不是显示浏览器保存对话框。 我尝试了一些mp3,并注意到对于某些mp3,保存对话框出现,而对于其他一些则通过浏览器进行流式传输。我能做些什么来强制mp3文件将被下载,而不是通过网络浏览器进行流式传输....亚马逊AWS S3强制下载MP3文件而不是流它
任何帮助将不胜感激。 感谢
我使用亚马逊S3来放mp3文件,然后让我们的网站访问者从亚马逊AWS下载MP3。我使用S3Fox来管理文件,一切似乎都正常工作,直到最近我们收到很多来自访问者的抱怨,说mp3是通过浏览器流式传输的,而不是显示浏览器保存对话框。 我尝试了一些mp3,并注意到对于某些mp3,保存对话框出现,而对于其他一些则通过浏览器进行流式传输。我能做些什么来强制mp3文件将被下载,而不是通过网络浏览器进行流式传输....亚马逊AWS S3强制下载MP3文件而不是流它
任何帮助将不胜感激。 感谢
为了做到这一点,你需要设置Content-Disposition头:
Content-disposition: attachment; filename=song.mp3
我不认为这是可能的S3Fox。您可以使用Bucket Explorer(不是免费)或编写脚本来上传文件。
好的,你问这个问题已经很长时间了,但是我有同样的问题,我想和社区分享我的解决方案,以防其他人需要解决这个问题。当然,您可以从Amazon S3控制台更改Content-Type和Content-Disposition,但有趣的是以编程方式进行。
下面的代码工作正常,我:
require_once '../sdk-1.4.2.1/sdk.class.php';
// Instantiate the class
$s3 = new AmazonS3();
// Copy object over itself and modify headers
$response = $s3->copy_object(
array(// Source
'bucket' => 'your_bucket',
'filename' => 'Key/To/YourFile'
),
array(// Destination
'bucket' => 'your_bucket',
'filename' => 'Key/To/YourFile'
),
array(// Optional parameters
'headers' => array(
'Content-Type' => 'application/octet-stream',
'Content-Disposition' => 'attachment'
)
)
);
// Success?
var_dump($response->isOK());
希望它能够帮助其他有同样的问题挣扎。
这最终成为我从AWS S3强制下载文件的解决方案。
在Safari浏览器中,文件以.html文件格式下载,直到我停止返回读取文件并仅仅运行该功能。
public function get_download($upload_id)
{
try {
$upload = Upload::find($upload_id);
if ($upload->deleted)
throw new Exception("This resource has been deleted.");
if ($upload->filename == '')
throw new Exception("No downloadable file found. Please email [email protected] for support.");
header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename={$upload->uploaded_filename};");
readfile("https://s3.amazonaws.com/stackoverflow/uploads/" . $upload->filename);
exit;
} catch(Exception $e) {
return $e->getMessage();
}
}
这似乎并不是强制从S3下载,而是通过您的网络服务器将文件从S3推回,捆绑您的web服务器资源以强制下载。 – davidjbullock 2013-06-19 16:11:29
@davidjbullock不知道它是否是,但这是一个不好的例子。我更新了我的例子,以反映我做得更好。 – 2013-06-20 00:22:26
嗯,那是什么样的脚本?你能用这样做吗? s3cmd(http://s3tools.org/s3cmd)? – Jonik 2010-05-19 16:54:26
我不确定s3cmd。看到这个论坛帖子http://developer.amazonwebservices.com/connect/thread.jspa?messageID=67395。您可以使用REST API来设置标题。亚马逊为许多语言提供了库(Ruby,python,C#)。您可以使用您选择的语言编写脚本。 – kgiannakakis 2010-05-20 07:39:05
感谢您的回复,我使用CloudBerry(免费软件)来设置内容标题。它工作正常!非常感谢 – Calua 2010-05-21 10:35:26