使用预签名 URL 将文件上传到 s3

保罗·杜波依斯

我正在尝试使用 aws 预签名 URL 在我的 s3 存储桶中上传文件。

这是我的 js 函数

function UploadObjectUsingPresignedURL() 
{
    var file = document.getElementById('customFile').files[0];
    console.log(file);
    var xhr = new XMLHttpRequest();
    xhr.open('PUT', 'hereMyPresignedURL', true);
    //xhr.setRequestHeader('Content-Type', 'image/jpeg');
    xhr.onload = () => {
      if (xhr.status === 200) {
        console.log('Uploaded data successfully');
      }
    };
    xhr.onerror = () => {
      console.log('Nope')
    };
    xhr.send(file); // `file` is a File object here 
}

这是我的 html

<div class="input-group">
                <div class="custom-file">
                    <input type="file" class="custom-file-input" id="customFile"
                        aria-describedby="customFile">
                    <label class="custom-file-label" for="customFile">Choose file</label>
                </div>
                <div class="input-group-append">
                    <button class="btn btn-outline-secondary" type="button" id="customFile" 
                    onclick="UploadObjectUsingPresignedURL()">Button</button>
                </div>
            </div>

这是我控制台中的结果......

控制台输出

  • functions.js:4 文件 {name: "aragorn.jpg", lastModified: 1590136296908, lastModifiedDate: Fri May 22 2020 10:31:36 GMT+0200 (heure d'été d'Europe centrale), webkitRelativePath:" : 7714, ...}
  • functions.js:10 成功上传数据)

所以看起来很顺利(成功上传数据),但是在我的 S3 存储桶中我没有新文件......因为我没有错误,我不知道如何调试这个......

谢谢 :) !!

编辑:这里是我的 .NET 代码,用于生成 Presigned-URL:

public static string MakeS3PresignedURIUpload()
        {
            string awsAccessKeyId = "XXX";
            string awsSecretAccessKey = "XXX";
            string s3Bucket = "test-bucket";
            string s3Key = "/aragorn.jpg";
            string awsRegion = "us-west-2";


            string presignedUri = "Error : No S3 URI found!";
            int expirationMinutes = 60;



            if (s3Bucket != String.Empty && s3Key != String.Empty && awsRegion != String.Empty)
            {
                try
                {
                    s3Key = s3Key.Replace("\\", "/");
                    GetPreSignedUrlRequest presignedUriReq = new GetPreSignedUrlRequest();
                    RegionEndpoint myRegion = RegionEndpoint.GetBySystemName(awsRegion);
                    AmazonS3Client client = new AmazonS3Client(awsAccessKeyId, awsSecretAccessKey, myRegion);
                    presignedUriReq.Verb = HttpVerb.PUT;
                    presignedUriReq.BucketName = s3Bucket;
                    presignedUriReq.Key = s3Key;
                    presignedUriReq.Expires = DateTime.UtcNow.AddMinutes(expirationMinutes);
                    presignedUri = client.GetPreSignedURL(presignedUriReq);
                }
                catch (AmazonS3Exception e)
                {
                    return string.Format("Error : S3 - MakeS3PresignedURIUpload - Error encountered on server.Message:'{0}' when writing an object", e.Message);
                }
                catch (Exception e)
                {
                    return string.Format("Error : S3 - MakeS3PresignedURIUpload - Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
                }
            }
            return presignedUri;
        }
保罗·杜波依斯
    string s3Key = "/aragorn.jpg";

改成

    string s3Key = "aragorn.jpg";

它正在工作,但将文件保存在存储桶中的未命名文件夹中,而不是直接保存在存储桶中......

谢谢@wschopohl 帮助我:)!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Java将AWS文件上传到S3

使用NodeJS将文件上传到Amazon S3

预签名的AWS S3 PUT URL无法使用jquery从客户端上传

使用服务器端应用程序生成的签名URL从android将文件(视频文件)上传到S3服务器

如何使用iOS将文件上传到Amazon S3并获取URL作为响应

使用预先签名的URL将本机上传到S3

S3预签名URL文件上传失败,带有安全的/ https URL

使用Ionic 2通过预签名的URL上传到s3时,SignatureDoesNotMatch错误

使用Alamofire将文件上传到Amazon S3

Django:使用Boto将文件上传到s3

使用Retrofit2将文件上传到AWS S3预签名URL

如何使用预签名的URL调试S3上传?

使用预签名URL从AWS s3读取文件的内容

使用Delphi将文件上传到Amazon S3

将文件上传到AWS S3预签名URL Retrofit2 Android

浏览器Javascript:将Json压缩为gzip,然后上传到S3预签名URL

生成预签名的url,以便使用python将文件上传到Google存储空间

如何使用Node.js和Axios将文件上传到AWS中的预签名URL?

如何使用angular或javascript中的预签名URL将文件上传到S3存储桶

无论我做什么,都无法使用预签名URL将文件上传到S3。AWS命令行有效。CURL和其他= 403

使用flask将文件上传到亚马逊s3

无法使用JavaScript将文件上传到S3

将文件上传到S3预签名URL

Ionic android-使用预签名的URL将文件上传到S3(错误代码:3)

ETag 与 Amazon S3 预签名 URL 的使用

使用预签名 URL 上传后,AWS S3 上的文件在文件中包含额外信息

如何将文件上传到 Laravel 中的 Amazon S3 预签名 URL?

使用预签名 URL 流式上传到 S3

使用生成的预签名 url 将文件上传到 minio 的请求中缺少字段