簡體   English   中英

Amazon S3加載多部分上傳文件中的問題

[英]Amazon S3 loading Issue in upload file in multipart

當我使用Amazon S3 multipart上傳文件然后加載時,文件未成功上傳。 e.PercentDone為100之后,此函數中的uploadRequest_UploadPartProgressEvent面臨加載問題,網頁正在加載無限時間。

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

還有其他人遇到過這個問題嗎?

我有一些建議可以找到一個有效的解決方案,但說實話,我沒有運行你的代碼(這是基於快速審查它)。 首先, BucketName屬性必須設置為存儲桶[1]的確切名稱,因此不應向其添加文件夾名稱。 相反,應將文件夾名稱添加為Key上的前綴:

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

接下來,使用Console.WriteLine可能很難看到捕獲的錯誤。 看來這是WinForms應用程序的一部分,所以也許使用Debug.WriteLine() [2]來顯示Visual Studio(或代碼等)中的錯誤將是一個好主意。

最后,也許重要的是,在事件處理程序中使用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] 使用async / await時防止winforms UI阻塞

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM