【发布时间】:2021-11-18 19:14:51
【问题描述】:
我尝试了很多不同的方法并阅读了很多关于 SO 的答案,但在遇到困难时寻求帮助。
我在 azure 上有一个存储帐户和容器,我正在那里成功上传图像,但由于某种原因,它们似乎已损坏。
如果我直接从容器中下载它们,我无法通过 img 标签访问任何图像,也无法查看它们(在 Windows 照片中)。
我相信我的配置是正确的,公共访问级别 blob(我也尝试过公共访问级别 container)。
图片未通过我的剃须刀页面上的网址显示
如果我下载并在 Windows 中打开,我也无法查看它
我在下面尝试过的 2 个文件流方法示例
//approach 1
using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
{
BlobClient blobClient = container.GetBlobClient(fileName);
await blobClient.UploadAsync(fileStream, new BlobHttpHeaders { ContentType = "image/jpg" });
}
//approach 2
using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
{
container.UploadBlob(attachment.FileName, fileStream);
}
//service
public async Task<bool> UploadSample(IFormFile attachment)
{
var configSection = Configuration.GetSection("AzureBlobStorge");
var connectionString = configSection.GetSection("ConnectionString").Value;
var containerName = configSection.GetSection("ContainerName").Value;
string fileName = Path.GetFileName(attachment.FileName);
string filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot\\images\\profiles", fileName);
BlobContainerClient container = new BlobContainerClient(connectionString, containerName);
container.SetAccessPolicy(PublicAccessType.BlobContainer);
using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
{
container.UploadBlob(attachment.FileName, fileStream);
//BlobClient blobClient = container.GetBlobClient(fileName);
//await blobClient.UploadAsync(fileStream, new BlobHttpHeaders { ContentType = "image/jpg" });
}
return true;
}
//controller
[HttpPost]
[ActionName("ProfilePicsAsync")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ProfilePicsAsync(Members item)
{
try
{
IFormFile formFile = HttpContext.Request.Form.Files[0];
var member = await _cosmosDbService.GetItemAsync(formFile.Name); //Id passed in the formfile object under name
if (ModelState.IsValid)
{
if (IsAdminUser())
{
if (formFile != null)
{
await _blobStorageService.UploadSample(formFile);
}
return RedirectToAction("Index");
}
return BadRequest("Not Authorised");
}
}
catch (Exception ex)
{
if(ex is BusinessRuleException)
{
return BadRequest(new BusinessRuleException(ex.Message));
}
}
//view
<form asp-action="ProfilePicsAsync" asp-controller="Home" method="post" enctype="multipart/form-data">
@Html.HiddenFor(m => m.Id)
<p>INPUT</p>
<input asp-for="Attachment" Name="@Model.Id" />
<button type="submit" id="btnUpload" class="btn btn-primary">Upload</button>
</form>
【问题讨论】:
-
您上传的内容类型错误。
-
我认为问题在于您的上传过程。可以分享一下上传图片的代码吗?
-
我已经用上传代码更新了我的帖子,在此先感谢
标签: azure .net-core blob azure-blob-storage