【问题标题】:Amazon S3 loading Issue in upload file in multipart分段上传文件中的 Amazon S3 加载问题
【发布时间】:2019-10-22 21:45:02
【问题描述】:

当我使用 Amazon S3 分段上传文件然后加载时,文件未成功上传。 uploadRequest_UploadPartProgressEvent 在此函数中,e.PercentDone 为 100 后面临加载问题,网页加载无限时间。

 protected void Button1_Click(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile)
            {
                extension = Path.GetExtension(FileUpload1.FileName);
                fileSize = FileUpload1.PostedFile.ContentLength;

                    Stream st = FileUpload1.PostedFile.InputStream;
                    string name = Path.GetFileName(FileUpload1.FileName);
                    string fName = Path.GetFileNameWithoutExtension(name);
                    string fExt = Path.GetExtension(name);

                    string strRes = String.Concat(fName, builder.ToString());
                    string strRes1 = String.Concat(strRes, fExt);

                    string s3FileName = @strRes1;
                    stt = st;
                    fileNameInS3 = s3FileName;
                    bool a;
                    TrackMPUAsync().Wait();

            }
        }
         public async Task TrackMPUAsync()
        {
            try
            {
                TransferUtility fileTransferUtility = new TransferUtility(s3Client);
                // Use TransferUtilityUploadRequest to configure options.
                // In this example we subscribe to an event.
                TransferUtilityUploadRequest uploadRequest =
                    new TransferUtilityUploadRequest
                    {
                        BucketName = bucketName + @"/" + foldername,
                        Key = filename,
                        InputStream = fileInputStrem
                    };

                uploadRequest.UploadProgressEvent +=
                     new EventHandler<UploadProgressArgs>
                         (uploadRequest_UploadPartProgressEvent);


                await fileTransferUtility.UploadAsync(uploadRequest);
                Console.WriteLine("Upload completed");
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }

      public void uploadRequest_UploadPartProgressEvent(object sender, 
      UploadProgressArgs e)
        {
            // Process event.
            Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
        }

有没有其他人遇到过这个问题?

【问题讨论】:

    标签: c# asp.net amazon-web-services amazon-s3


    【解决方案1】:

    我有一些关于获得有效解决方案的建议,但老实说,我没有运行您的代码(这是基于快速审查它)。首先,BucketName 属性必须设置为存储桶 [1] 的确切名称,因此您不应向其中添加文件夹名称。相反,文件夹名称应作为前缀添加到Key:

    BucketName = bucketName,
    Key = foldername + @"/" + filename,
    

    接下来,使用Console.WriteLine 可能很难看到捕获的错误。这似乎是 WinForms 应用程序的一部分,因此使用 Debug.WriteLine()[2] 在 Visual Studio(或 Code 等)中显示错误可能是个好主意。

    最后,也许更重要的是,在事件处理程序中使用TrackMPUAsync().Wait() 是同步的,并且会一直阻塞直到上传完成[3],您可能希望异步执行上传:

    Task.Run(() => TrackMPUAsync());
    

    希望这有帮助。

    [1]https://docs.aws.amazon.com/AmazonS3/latest/dev/HLuploadFileDotNet.html

    [2]https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debug.writeline

    [3]Prevent winforms UI block when using async/await

    【讨论】:

    • 嗨,当我使用这个 'Task.Run(() => TrackMPUAsync());'设置 TrackMPUAsync().Wait() 这个代码然后,TrackMPUAsync() 这个函数没有执行。以及如何将 e.percentdone 值更新为标签。 public void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e) { Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes); Label1.Text=e.percentdone;上面的代码在 aws s3 上上传文件时不起作用。当 e.percentdone 为 100 时显示值。
    猜你喜欢
    • 2017-08-23
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多