当前位置: 首页 > 知识库问答 >
问题:

S3在https上用桶名中的点上载

田文景
2023-03-14

我一直试图在一个使用https的站点上实现ajax上传到AmazonS3,所以当然我也必须上传到S3的安全版本https://bucket.name.S3.amazonaws.com。但是,当我尝试此上载时,我最终得到一个错误,即站点具有无效的安全证书。从我读到的内容来看,这是意料之中的,因为Amazon的s3证书只覆盖一级子域(http://shlomoswidler.com/2009/08/Amazon-S3-gotcha-using-virtual-host.html)。因此,我将上载到的URL改为https://s3.amazonaws.com/bucket.name,根据我读到的内容,它应该相当于https://bucket.name.s3.amazonaws.com。但是,尝试上传给我一个301永久重定向错误。我知道我的代码可以正常工作,因为当我试图上载到一个名称中没有点的bucket,即https://bucket.s3.amazonaws.com时,它通过得很好,但当我尝试https://s3.amazonaws.com/bucket时,它也得到301。

 <form id="form">
    <input type="hidden" name="key" value="..." />
    <input type="hidden" name="acl" value="public-read" />
    <input type="hidden" name="X-Amz-Credential" value="..." />
    <input type="hidden" name="X-Amz-Algorithm" value="..." />
    <input type="hidden" name="X-Amz-Date" value="..." />
    <input type="hidden" name="Policy" value="..." />
    <input type="hidden" name="X-Amz-Signature" value="..." />
    <input type="hidden" name="success_action_redirect" value="..." />
    <input id="upload" type="submit" value="Upload" class="submit-upload clearfix button blue save"/>
</form>

<script type="text/javascript">
     document.getElementById('upload').addEventListener('click', function (e) {
          e.preventDefault();
          var formData = new FormData(document.getElementById('form'));
          var xhr = new XMLHttpRequest();
          xhr.open('POST', 'https://s3.amazonaws.com/bucket.name/', true);
          xhr.send(formData);
     });
</script>

所以我的问题是:有没有一种方法通过HTTPS实现ajax上载到名称中带有点的S3 bucket?

共有1个答案

印高阳
2023-03-14

在http://docs.aws.amazon.com/amazons3/latest/dev/virtualhosting.html上

AmazonS3支持所有地区的虚拟主机式和路径式访问。但是,路径样式语法要求您在尝试访问桶时使用特定于区域的endpoint。例如,如果有一个名为mybucket的bucket驻留在EU中,您希望使用路径样式的语法,并且对象名为puppy.jpg,那么正确的URI是http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg。如果您尝试使用以下任一路径式语法访问美国东部(N.Virginia)地区以外的bucket,您将收到一个“Permanentredirect”错误、HTTP响应代码301和一条消息,指示您的资源的正确URI是什么:

>

  • http://s3.amazonaws.com

  •  类似资料:
    • 我将如何在节点中对S3上传进行存根。js? 为了获得洞察力,我使用摩卡进行测试,使用Sinon进行存根,但我愿意改变任何事情。我有一个文件,它导出一个执行上载的函数。看起来是这样的: 如果我尝试存根或AWS。S3。原型,没有任何变化。我假设这是因为我的测试需要本身,并且每个函数都有自己的副本。 我的测试是这样的: 这个测试工作正常,但它不会将上传存根到S3,因此上传实际上要经过:X。

    • 问题内容: 我正在尝试在AWS ECS上设置Jenkins服务器,但是我必须发出将S3挂载到我的Docker容器的信息。 谁能为我提供可以在ECS服务中安装s3存储桶的任务定义?soi可以将我的Jenkins工作区存储在s3上 问题答案: 您可以在EC2实例中安装s3fs(或者可以将自定义AMI用于ECS群集)。将S3存储桶安装在EC2实例中,然后您就可以始终共享主机路径。

    • 致命错误:在/var/www/vhosts/domain/library/amazon/guzzle/http/entitybody.php:50堆栈跟踪:#0/var/www/vhosts/domain/library/aws/common/clientary/uploadbodylistener.php(85):guzzle\http\entitybody::factory(false)#1[

    • 问题内容: 我需要创建一个Zip文件,该文件由位于我的s3存储桶中的一系列文件(视频和图像)组成。 目前使用以下代码的问题是,我很快达到了Lambda的内存限制。 使用Lambda是否有可能,还是我应该采用其他方法? 是否可以即时写入压缩的zip文件,从而在某种程度上消除内存问题,还是我需要在压缩之前收集文件? 任何帮助将非常感激。 问题答案: 好的,我今天必须这样做,并且可以正常工作。直接缓冲区

    • 问题内容: 我正在尝试让HTTPS在node.express.js上工作,但我无法弄清楚。 这是我的代码。 当我运行它时,它似乎仅响应HTTP请求。 我写了简单的基于香草的HTTPS应用程序: 当我运行此应用程序时,它 确实 响应HTTPS请求。请注意,我认为fs结果上的toString()并不重要,因为我使用了两者的组合,但仍然没有es bueno。 编辑添加: 对于生产系统,最好使用Nginx

    • 我用的是fs。readFile读取大约700KB的本地mp4文件,AWS SDK将文件加载到我的S3存储桶中。这个过程是可行的,但文件已损坏,可能是因为S3上生成的文件大小仅为500KB左右而被截断。 我使用的代码可以很好地处理图像。只是不适用于mp4文件。这是我的代码: 我已尝试从params对象中省略ContentEncoding和/或ContentType属性。 编辑: 因此,当我conso