Проблема с загрузкой Amazon S3 в загружаемом файле из нескольких частей - PullRequest
0 голосов
/ 07 июня 2019

Когда я загружаю файл, используя Amazon S3 multipart, то он загружается, файл не был успешно загружен. 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);
        }

Кто-нибудь еще сталкивался с этой проблемой?

1 Ответ

0 голосов
/ 08 июня 2019

У меня есть пара предложений для получения рабочего решения, но, если честно, я не запустил ваш код (это основано на его быстрой проверке).Во-первых, для свойства 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] Запретить блокировку пользовательского интерфейса winforms при использовании async / await

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...