上传一个txt到AmazonS3

Upload a txt to Amazon S3

本文关键字:一个 txt AmazonS3      更新时间:2023-09-26

我正在使用s3-sdk上传一个字符串(它将被更改为txt文件)。使用sdk是可以的。但由于sdk只适用于新浏览器(例如:ie10+),我需要用另一种方式上传我的文件(适用于旧浏览器)

对于图像文件,我使用输入(类型文件)和上传的表格

<form id="urlform" enctype="multipart/form-data" method="post" target="upload_target" class="inline">
    <input type="hidden" name="key" value="{{$parent.keyurl}}">
    <input type="hidden" name="acl" value="public-read">
    <input type="hidden" name="AWSAccessKeyId" value="{{$parent.awSAccessKeyIdUrl}}">
    <input type="hidden" name="success_action_redirect" value="{{$parent.redirectionUrl}}">
    <input type="hidden" name="x-amz-meta-filename" value="{{$parent.filenameurl}}">
    <input type="hidden" name="policy" value="{{$parent.policyurl}}">
    <input type="hidden" name="signature" value="{{$parent.signatureurl}}">
    <input type="hidden" name="x-amz-security-token" value="{{$parent.urlSessionToken}}">
    <div>
        <label>
        </label>
        <input type="file" name="file" id="urlfileinput">
    </div>
</form> 

此解决方案仅适用于输入类型文件。

出于安全原因,我不能用jquery更改输入的值。

是否有其他上传文本的方法(可能使用rest api)?

我很好奇你为什么要使用URL表单将其提交给亚马逊。。。这是非常不安全的,因为你要把你的AWS访问密钥发给每个人。首先,您需要研究使用AmazonSDK for Javascript,将Angular作为一个依赖项,它应该很容易工作。

接下来,您需要考虑在S3 Bucket上执行CORS(跨域资源共享),这样您就可以在不需要身份验证的情况下从任何地方"上传"S3上的内容(请小心,因为每个都可以访问它并上传任何内容,如果您没有正确配置它,则可以访问其他内容,如删除)。

最后,您只需要使用SDK的AWS.S3().putObject()函数将您需要的任何内容上传到您的公共S3存储桶中。

您可以使用表单数据发送文件。

var formData = new FormData();
formData.append("key", "{{$parent.keyurl}}");
formData.append("acl", 'public-read');
formData.append("AWSAccessKeyId", '{{$parent.awSAccessKeyIdUrl}}');
formData.append("success_action_redirect", '{{$parent.redirectionUrl}}');
.........
// JavaScript file-like object...
var blob = new Blob('testSample', { type: "text/xml"});
 formData.append("file", blob);
var request = new XMLHttpRequest();
request.open("POST", "upload_target");
request.send(formData);

我找到了一个解决方案。为了上传一个文本,我必须使用一个名为"文件"的表单内部。

<form id="disclaimerform" enctype="multipart/form-data" method="post" target="upload_target" class="inline">
    <input type="hidden" name="key" value="{{keydisclaimer}}">
    <input type="hidden" name="acl" value="public-read">
    <input type="hidden" name="AWSAccessKeyId" value="{{awSAccessKeyId}}">
    <input type="hidden" name="success_action_redirect" value="{{redirection}}">
    <input type="hidden" name="x-amz-meta-filename" value="{{disclaimerfilename}}">
    <input type="hidden" name="x-amz-security-token" value="{{session_token}}">
    <input type="hidden" name="policy" value="{{policy}}">
    <input type="hidden" name="signature" value="{{signature}}">
    <div>
        <label></label>
        <textarea style="opacity:0;" name="file" id="disclaimerinput"/>
    </div>
</form>