繁体   English   中英

将txt上载到Amazon S3

[英]Upload a txt to Amazon S3

我正在使用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更改输入的值。

还有另一种上传文本的方法(也许使用其余的api)吗?

我很好奇您为什么使用URL表单将其提交给Amazon ...这是非常不安全的,因为您正在向所有人提供AWS Access Key。 首先,您需要研究使用Amazon SDK for Javascript ,它将Angular作为依赖项应该足够容易地工作。

接下来,您需要研究在S3存储桶上进行CORS(跨域资源共享),以便实际上可以从任何地方“上载” S3上的内容而无需身份验证(请谨慎操作,因为每个人都可以访问它)并可以上传任何内容,如果配置不正确,则可以访问其他内容(如删除)。

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

您可以使用formdata发送文件。

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);

我找到了解决方案。 要上传文本,我必须在表单内部使用名称为“ file”的文件。

<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM