我尝试使用以下代码将文件上传到 azure blob 容器,但上传的文件已损坏。
public async void UploadFile(Stream memoryStream, string fileName, string containerName)
{
try
{
memoryStream.Position = 0;
CloudBlockBlob file = GetBlockBlobContainer(containerName).GetBlockBlobReference(fileName);
file.Metadata["FileType"] = Path.GetExtension(fileName);
file.Metadata["Name"] = fileName;
await file.UploadFromStreamAsync(memoryStream).ConfigureAwait(false);
}
catch (Exception ex)
{
throw ex;
}
}
我该如何解决它。
无法打开使用上述代码上传到 blob 的 Excel 文件。
错误:
Stream streamData= ConvertDataSetToByteArray(sourceTable); // sourceTable is the DataTable
streamData.Position = 0;
UploadFile(streamData,'ABCD.xlsx','sampleBlobContainer'); //calling logic to upload stream to blob
private Stream ConvertDataSetToByteArray(DataTable dataTable)
{
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dataTable.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dataTable.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => (field.ToString()));
sb.AppendLine(string.Join(",", fields));
}
var myByteArray = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
var streamData = new MemoryStream(myByteArray);
return streamData;
}
最佳答案
上面的代码创建一个 .csv 文件,而不是 .xlsx 文件。您可以通过创建与代码构建类似的内容来轻松测试这一点,例如:
然后,如果您将其重命名为 .xlsx,以复制您所做的事情,您将得到:
您有两种解决方案:
- 您需要构建一个实际的 .xlsx 文件,可以使用 https://github.com/JanKallman/EPPlus 来完成此操作例如包
或
- 您需要将文件另存为 .csv,因为它才是真正的文件。
您将其上传到 azure blob 存储的事实在这里完全无关 - 上传没有问题。
关于c# - 使用 UploadFromStreamAsync 上传文件后 Azure blob 文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901394/