• AWS S3 读取流的问题


    因为业务,需要将两张MongoDB 表的数据切换到 AWS 的S3中,再切换中发现下面的代码;先删除整个TempFiles 目录,将流写到特定文件中,然后再读出来; 通过尝试修改,认为前人是为了解决AWS 获取的流是不能直接拿来,才这么处理的。但是这样处理会有并发问题。

    var request = new GetObjectRequest
    {
    	BucketName = bucket.StartsWith(BucketPrefix) ? bucket : BucketPrefix + bucket,
    	Key = key
    };
    
    var tempDirectory = AppDomain.CurrentDomain.BaseDirectory + "/App_Data/TempFiles/";
    
    if (Directory.Exists(tempDirectory))
    {
    	var tempFiles = Directory.GetFiles(tempDirectory);
    	foreach (var tempFile in tempFiles)
    	{
    		try
    		{
    			if (File.Exists(tempFile))
    			{
    				File.Delete(tempFile);
    			}
    		}
    		catch (Exception ex)
    		{
    			Logger.Debug($"Can't delete temp file {tempFile}. Eception={ex.Message}");
    		}
    	}
    }
    
    using (GetObjectResponse response = await Client.GetObjectAsync(request).ConfigureAwait(false))
    {
    	// the response stream from amazon is encrypt, so wo have to write stream to a temp file.
    	var tempFilePath = Path.Combine(tempDirectory + Guid.NewGuid());
    	response.WriteResponseStreamToFileAsync(tempFilePath, append: false, CancellationToken.None).GetAwaiter().GetResult();
    	var fileName = response.Metadata["x-amz-meta-title"];
    
    	return new ReadFileAsyncResult
    	{
    		FileStream = new FileStream(tempFilePath, FileMode.Open, FileAccess.Read, FileShare.Read),
    		FileName = fileName
    	};
    }
    

      

    通过求教 获取了一个新的方法


    var
    request = new GetObjectRequest { BucketName = bucket.StartsWith(BucketPrefix) ? bucket : BucketPrefix + bucket, Key = key }; using (GetObjectResponse response = await Client.GetObjectAsync(request).ConfigureAwait(false)) { var fileName = response.Metadata["x-amz-meta-title"]; var memoryStream = new MemoryStream(); response.ResponseStream.CopyTo(memoryStream); memoryStream.Position = 0; return new ReadFileAsyncResult { FileStream = memoryStream, FileName = fileName };
    }
  • 相关阅读:
    C# 5注释
    C# 4关键字
    C# 3练习题
    python之子类调用父类的同名属性和方法
    python之继承
    python之对象删除和输出
    python之r,w,a
    python之类中的方法和属性
    python之面向对象
    python之os对文件的操作
  • 原文地址:https://www.cnblogs.com/zhihang/p/11280023.html
Copyright © 2020-2023  润新知