简体   繁体   中英

Amazon S3 does not release the file after the upload

I have a wcf service here to upload the files to Amazon s3 server. After the successful upload, I need to delete the file from my local path. But when I try to delete the file, got an error says The process cannot access the file.Because its being used by another process".Sharing below my code snippets.

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

If anyone know about the issue, please update..

There might be a timing issue here, so you might want to try to close the stream explicitly.

Do note, I am not sure, if I am mistaken I'll remove this, but it was to long for a comment.

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

More info on the properties: https://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Model_PutObjectRequest.htm

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM