Amazon S3 не выпускает файл после загрузки - PullRequest
1 голос
/ 02 апреля 2020

У меня есть служба wcf для загрузки файлов на сервер Amazon s3. После успешной загрузки мне нужно удалить файл из моего локального пути. Но когда я пытаюсь удалить файл, появляется сообщение об ошибке «Процесс не может получить доступ к файлу. Потому что он используется другим процессом». Ниже приведен фрагмент кода.

var putRequest = new PutObjectRequest
{
    BucketName = System.Configuration.ConfigurationManager.AppSettings["S3Bucket"]
                       .ToString(),
    Key = keyName,
    FilePath = path,
    ContentType = "application/pdf"
};

client = new AmazonS3Client(bucketRegion);
PutObjectResponse response = await client.PutObjectAsync(putRequest);
putRequest = null;
client.Dispose();  
File.Delete(path);

Если кто-то знает о проблеме Пожалуйста, обновите ..

1 Ответ

0 голосов
/ 02 апреля 2020

Здесь может быть проблема с синхронизацией, поэтому вы можете попытаться явно закрыть поток.

Обратите внимание, я не уверен, если я ошибаюсь, я удалю это, но это было чтобы получить комментарий.

using (var fileStream = new File.OpenRead(path))
{
    var putRequest = new PutObjectRequest
    {
        BucketName = System.Configuration.ConfigurationManager.AppSettings["S3Bucket"]
                    .ToString(),
        Key = keyName,
        InputStream = fileStream ,
        ContentType = "application/pdf",
        AutoCloseStream = false,
    };

    using (var c = new AmazonS3Client(bucketRegion))
    {
         PutObjectResponse response = await c.PutObjectAsync(putRequest);
    }
} //filestream should be closed here, if not: call fileStream.Close() 

File.Delete(path);

Подробнее о свойствах: https://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Model_PutObjectRequest.htm

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