【问题标题】:How to upload an Image to Amazon S3 as a parameter in asp.net web api如何将图像作为 asp.net web api 中的参数上传到 Amazon S3
【发布时间】:2020-04-08 03:22:10
【问题描述】:

我需要将图像上传到 Amazon S3,它将作为来自前端的参数

我正在考虑获取图像的路径并从路径中获取图像,如下所述:

    [HttpPost]
    [Route("upload")]
    public HttpResponseMessage UploadImage(string localImagePath)
    {
      Image img = Image.FromFile(localImagePath);

      // performing the image upload to S3
    }

但是前端人员将图像作为文件发送。发送图片的格式应该是什么?

谁能帮我在asp.net WEB API中上传图片。

【问题讨论】:

    标签: c# amazon-s3 asp.net-web-api2 image-uploading


    【解决方案1】:

    请要求前端人员将文件作为多部分内容发送。

    参考下面的代码来做你的事:

    using Amazon.Runtime;
    using Amazon.S3;
    using Amazon.S3.Model;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Threading.Tasks;
    
    namespace Amazon.DocSamples.S3
    {
        class UploadFileMPULowLevelAPITest
        {
            private const string bucketName = "*** provide bucket name ***";
            private const string keyName = "*** provide a name for the uploaded object ***";
            private const string filePath = "*** provide the full path name of the file to upload ***";
            // Specify your bucket region (an example region is shown).
            private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
            private static IAmazonS3 s3Client;
    
            public static void Main()
            {
                s3Client = new AmazonS3Client(bucketRegion);
                Console.WriteLine("Uploading an object");
                UploadObjectAsync().Wait(); 
            }
    
            private static async Task UploadObjectAsync()
            {
                // Create list to store upload part responses.
                List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
    
                // Setup information required to initiate the multipart upload.
                InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };
    
                // Initiate the upload.
                InitiateMultipartUploadResponse initResponse =
                    await s3Client.InitiateMultipartUploadAsync(initiateRequest);
    
                // Upload parts.
                long contentLength = new FileInfo(filePath).Length;
                long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
    
                try
                {
                    Console.WriteLine("Uploading parts");
    
                    long filePosition = 0;
                    for (int i = 1; filePosition < contentLength; i++)
                    {
                        UploadPartRequest uploadRequest = new UploadPartRequest
                            {
                                BucketName = bucketName,
                                Key = keyName,
                                UploadId = initResponse.UploadId,
                                PartNumber = i,
                                PartSize = partSize,
                                FilePosition = filePosition,
                                FilePath = filePath
                            };
    
                        // Track upload progress.
                        uploadRequest.StreamTransferProgress +=
                            new EventHandler<StreamTransferProgressArgs>(UploadPartProgressEventCallback);
    
                        // Upload a part and add the response to our list.
                        uploadResponses.Add(await s3Client.UploadPartAsync(uploadRequest));
    
                        filePosition += partSize;
                    }
    
                    // Setup to complete the upload.
                    CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
                        {
                            BucketName = bucketName,
                            Key = keyName,
                            UploadId = initResponse.UploadId
                         };
                    completeRequest.AddPartETags(uploadResponses);
    
                    // Complete the upload.
                    CompleteMultipartUploadResponse completeUploadResponse =
                        await s3Client.CompleteMultipartUploadAsync(completeRequest);
                }
                catch (Exception exception)
                {
                    Console.WriteLine("An AmazonS3Exception was thrown: { 0}", exception.Message);
    
                    // Abort the upload.
                    AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
                    {
                        BucketName = bucketName,
                        Key = keyName,
                        UploadId = initResponse.UploadId
                    };
                   await s3Client.AbortMultipartUploadAsync(abortMPURequest);
                }
            }
            public static void UploadPartProgressEventCallback(object sender, StreamTransferProgressArgs e)
            {
                // Process event. 
                Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
            }
        }
    }
    

    您可以从这里参考更多信息:Amazon S3 File Upload

    【讨论】:

      猜你喜欢
      • 2011-04-16
      • 1970-01-01
      • 2018-01-06
      • 2014-06-26
      • 2023-01-21
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多