我有文件在亚马逊的S3。他们被命名为一个独特的ID所以没有重复。我访问它们使用授权的网址。我需要能够通过他们通过浏览器,但我需要重新命名它们。现在我用fopen,但是文件的下载到我的服务器提供服务之前文件的浏览器。我怎么会有该文件的通过'我的服务器向浏览器?或者我怎么缓冲的下载下载的一小块给我服务器和通过浏览器,同时下载的下一块?

还-我真的想要使用配置媒体播放器,但他们没提供证的网址。我相信我可以使用卷发送全权证书的要求-我可以做这样的'通过文件服务的卷曲?

谢谢!

有帮助吗?

解决方案

我不熟悉如何S3工作,所以我不知道,如果这个解决方案是可能的。但你能不能简单地重新定向用户浏览该文件?如果我理解正确的话,S3允许您可以创建网址的任何文件在你的水桶.所以如果说,这些付费下载,然后你可以 有S3产生一个临时网址为,下载 然后取出,一旦用户下载。

如果这不是一个选项,你可以试试这些PHP Classes:

  • HTTP协议的客户 -一级实现要求HTTP资源(使用的下流wrapper).允许要求被流。
  • gHttp -HTTP流的包装,让你待的远程HTTP资源作为文件、使用功能等 fopen(), fread(), 等等。
  • 亚马逊S3流的包装 -亚马逊S3流,包装,通过同开发商的作gHttp.还允许远程资源进行访问像普通的文件的通过 fopen('s3://...').

编辑:

这页 有的信息如何以"预先验证"的要求编码认证的关键在的网址。这是根据部分的标题为: 查询串的要求身份验证的替代.

// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
   return "$req\n\n\n$expires\n$uri";
}

function encodeSignature($sig, $key) {
    $sig = utf8_encode($sig);
    $sig = hash_hmac('sha1', $sig, $key);
    $sig = base64_encode($sig);
    return urlencode($sig);
}

$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);

$url .= '?AWSAccessKeyId='.$awsKeyId
       .'&Expires='.$expires
       .'&Signature='.$signature;

然后只需向用户 $url, 和他们应该能够下载的文件。签名是通过编码加密的方案(sha1),所以没有风险,他们无法担任角色的秘密访问的关键是发现了。

其他提示

您是否尝试过使用HTTP_GET,与request_options指定httpauth和httpauthtype?虽然我不记得,如果这种方法假定一个字符串有效的类型,这可能不是很好的二进制工作。

如果这是成功的,那么你就应该能够提供正确的MIME类型,并写出到浏览器。

您是否尝试过BU只是使用ReadFile的(“的http://用户名:密码@主机/文件名。分机“)?

这只会旁路和直接写OutputBuffer中,但是如果内容类型是关注的,你需要验证第一。

使用烯URL作为参数还对ReadFile要求PHP与urlwrapper支撑编译。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top