不幸的是,我几乎被困在以下场景中:
我正在使用.NET Core3.1,并通过DI与HttpClient (类型化客户端)从url获取数据。此数据是应上载到Azure Blob存储的csv文件。此时,我正在尝试将其上传到Blob Storage,但似乎失败了,出现以下异常:
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.我目前不知道为什么上传不起作用。来自其他流的其他上传似乎没有任何错误。你们谁有线索给我?
我的班级
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);
}
}发布于 2020-08-24 21:20:24
复制连接字符串并将其赋值给upload_ToBlob()方法中的storageAccount_connectionString变量
storageAccount_connectionString = "your Azure storage account connection string" 以下语句用于创建存储帐户、Blob客户端和Blob容器的对象。
CloudStorageAccount mycloudStorageAccount = CloudStorageAccount.Parse(storageAccount_connectionString);
CloudBlobClient blobClient = mycloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(azure_ContainerName); 此代码用于检查指定的容器是否存在于存储账户中。
如果存在,应用程序将使用现有容器。否则,会在存储帐号内创建一个指定名称的容器。
if (container.CreateIfNotExists())
{
container.SetPermissionsAsync(new
BlobContainerPermissions
{
PublicAccess =BlobContainerPublicAccessType.Blob
});
} 下面的语句用于使用扩展名为的文件名创建Block blob对象
CloudBlockBlob cloudBlockBlob = container.GetBlockBlobReference(filename_withExtension); cloudBlockBlob.UploadFromStreamAsync( file )语句用于将文件上传到blob存储。
https://stackoverflow.com/questions/63561591
复制相似问题