首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在将ResponseStream上载到Blob存储

正在将ResponseStream上载到Blob存储
EN

Stack Overflow用户
提问于 2020-08-24 21:02:12
回答 1查看 342关注 0票数 1

不幸的是,我几乎被困在以下场景中:

我正在使用.NET Core3.1,并通过DI与HttpClient (类型化客户端)从url获取数据。此数据是应上载到Azure Blob存储的csv文件。此时,我正在尝试将其上传到Blob Storage,但似乎失败了,出现以下异常:

代码语言:javascript
复制
 System.Net.Http: The operation was canceled. System.Net.Http: Error while copying content to a stream. 
 System.Net.Sockets: Unable to read data from the transport connection: The I/O operation has been aborted because of either a thread exit or an application request.. 
 The I/O operation has been aborted because of either a thread exit or an application request.

我目前不知道为什么上传不起作用。来自其他流的其他上传似乎没有任何错误。你们谁有线索给我?

我的班级

代码语言:javascript
复制
public class Web<T> where T : BlobStorageContext
{

    private HttpClient _client { get; }
    private ILogger<Web> _logger;
    private Csv<T> _csv { get; }

    public Web(HttpClient client, Csv<T> csv, ILogger<Web> logger)
    {
        _client = client;
        _logger = logger;

        _csv = csv;
    }

    public async Task AccessWebFileAndSaveToAzureAsync()
    {
        ...

        var request = new HttpRequestMessage(HttpMethod.Get,
            url);
        
        using (var response = await _client.SendAsync(request))
        {
           
            await using (var str = await response.Content.ReadAsStreamAsync())
            {
                await _csv.WriteFileToAzureAsync(str);
            }
        }
    }
}


public class Csv<T> where T : BlobStorageContext
{
    private BlobServiceClient _blobServiceClient { get; set; }
    private ILogger<Csv<T>> _logger { get; set; }

    public Csv(IOptions<BlobStorageConfiguration<T>> configuration, ILogger<Csv<T>> logger)
    {
        _blobServiceClient = new BlobServiceClient(configuration.Value.ConnectionString());
        _logger = logger;
    }

    public async Task WriteFileToAzureAsync(Stream str)
    {
      
        var container = _blobServiceClient.GetBlobContainerClient("container);
        var blob = container.GetBlobClient(blobPath);
        await blob.UploadAsync(str, true);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-08-24 21:20:24

复制连接字符串并将其赋值给upload_ToBlob()方法中的storageAccount_connectionString变量

代码语言:javascript
复制
storageAccount_connectionString = "your Azure storage account connection string"  

以下语句用于创建存储帐户、Blob客户端和Blob容器的对象。

代码语言:javascript
复制
CloudStorageAccount mycloudStorageAccount = CloudStorageAccount.Parse(storageAccount_connectionString);  
CloudBlobClient blobClient = mycloudStorageAccount.CreateCloudBlobClient(); 
CloudBlobContainer container = blobClient.GetContainerReference(azure_ContainerName);   

此代码用于检查指定的容器是否存在于存储账户中。

如果存在,应用程序将使用现有容器。否则,会在存储帐号内创建一个指定名称的容器。

代码语言:javascript
复制
if (container.CreateIfNotExists())
{      
    container.SetPermissionsAsync(new    
    BlobContainerPermissions    
   {    
       PublicAccess =BlobContainerPublicAccessType.Blob    
   });
} 

下面的语句用于使用扩展名为的文件名创建Block blob对象

代码语言:javascript
复制
CloudBlockBlob cloudBlockBlob = container.GetBlockBlobReference(filename_withExtension);  

cloudBlockBlob.UploadFromStreamAsync( file )语句用于将文件上传到blob存储。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63561591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档