Служба Windows для загрузки на S3

#c# #amazon-web-services #amazon-s3 #service #upload

#c# #amazon-веб-сервисы #amazon-s3 #Обслуживание #загрузка

Вопрос:

У меня есть служба Windows, которая отслеживает папку на наличие новых файлов, а затем отправляет в корзину S3 для обработки. Служба работает для первого файла, но затем я получаю это исключение для любых файлов после этого.

Сообщение: «Процесс не может получить доступ к файлу»C:PDFssample-2.pdf «потому что он используется другим процессом». при записи объекта

Вот часть кода для загрузки:

  private static async Task UploadFileAsync()
    {
        try
        {
            var fileTransferUtility = new TransferUtility(s3Client);

            //await fileTransferUtility.UploadAsync(filePath, bucketName);

            Log.WriteLine("FilePath: "   filePath);

            using (var fileToUpload = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                await fileTransferUtility.UploadAsync(fileToUpload, bucketName, fileToUpload.Name);
            }

            Log.WriteLine("File uploaded: "   filePath);
        }
        catch (AmazonS3Exception e)
        {
            Log.WriteLine("Error encountered on server. Message: '"  e.Message  "' when writing an object");
        }
        catch (Exception e)
        {
            Log.WriteLine("Unknown encountered on pc. Message: '"   e.Message   "' when writing an object");
        }
    }
  

Изначально у меня был установлен режим FileMode для чтения, а также для доступа к файлам для чтения.

Есть какие-либо подсказки?

Комментарии:

1. Достаточно ли времени вы ждете завершения записи файла sample-2.pdf, прежде чем забрать его? Например, загружаются ли PDF-файлы с FTP или сбрасываются туда другим процессом? Иногда для завершения загрузки файла требуется секунда или 2, и в течение этого времени он блокируется ОС.

2. @Джон Да, я ждал от нескольких минут до нескольких часов. Если я перезапущу службу, я смогу снова загрузить один файл. Я просто копирую и вставляю файл из одного каталога в отслеживаемый каталог.

3. Не должна ли эта строка быть fileToUpload = new FileStream(путь к файлу, FileMode. Открыть, FileAccess.Read)) ?

4. @Jon Это то, что у меня изначально было, и это не работает. Попробовал еще раз, чтобы быть уверенным.

5. @Jon Это работает, если я копирую несколько файлов одновременно. Проблема возникает по одному за раз.