zoukankan      html  css  js  c++  java
  • 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 };
    }
  • 相关阅读:
    计算机网络 实验之 面向连接和无连接的套接字到底有什么区别?
    计算机网络 实验之 Internet 套接字
    计算机网络 实验之 socket是什么?套接字是什么?
    PepperLa's Boast(单调队列优化二维dp)
    理想的正方形(单调队列在二维的应用)
    移相器以及相控阵雷达移相器位数的选择
    盲速和频闪——雷达
    多普勒效应----雷达
    线性调频(LFM)脉冲压缩-----------雷达
    雷达----脉冲压缩
  • 原文地址:https://www.cnblogs.com/zhihang/p/11280023.html
Copyright © 2011-2022 走看看