gpt4 book ai didi

ASP.NET Web API Azure Blob 存储非结构化

转载 作者:行者123 更新时间:2023-12-03 05:45:37 25 4
gpt4 key购买 nike

我正在构建一个 ASP.NET Web API 项目,需要使用 Azure Blob 存储上传 Word 文档。我有一种创建用户配置文件的方法,但不幸的是,我遇到了与 azure blob 存储和上传文档相关的问题。调试时,IFormFile 文档为 null,与 azure 的连接也为 null。我无法弄清楚断开连接在哪里。如果有人知道解决方案,我将不胜感激。下面是我写的代码。

Model

Person Model

public int Id {get; set;}
public string FirstName {get; set;}
public string LastName {get;set;}
public string URL {get;set;}
public string DocName {get;set;}
public string IFormFile[] DocUpload {get;set;}

Repository

public class DocRepo : IDocRepo
{
private CloudStorageAccount storageAccount = null;
private CloudBlobContainer cloudBlobContainer = null;

public IConfiguration _config { get; }

private readonly ILogger _logger;

public DocRepo(ILogger logger)
{
_logger = logger;
}


public void Configure()
{
var AzConnectionString = _config["AzConnectionString"];

if (CloudStorageAccount.TryParse(AzConnectionString, out storageAccount))
{
try
{
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();

cloudBlobContainer = cloudBlobClient.GetContainerReference("folder");
cloudBlobContainer.CreateAsync().GetAwaiter().GetResult();

BlobContainerPermissions permissions = new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
};
cloudBlobContainer.SetPermissionsAsync(permissions).GetAwaiter().GetResult();
}
catch (StorageException ex)
{
_logger.LogError("Error returned from the service: {0}", ex);
}
_logger.LogInformation("Success");
}
else
{
_logger.LogInformation("No Connection");
}
}



public async Task Upload(IFormFile[] docuFile)
{
Person person = new Person();
person.DocUpload = docuFile;

List<string> url = new List<string>();
List<string> docName = new List<string>();

try
{
if (docuFile != null)
{
foreach (var file in docuFile)
{

if (file.ContentType == "application/msword")
{
if (file.Length < 5 * 1400 * 1400)
{
var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition);

var filename = parsedContentDisposition.FileName.Trim('"');
docName.Add(filename);

filename = Guid.NewGuid().ToString() + "-" + filename;

CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(filename);
cloudBlockBlob.Properties.ContentType = file.ContentType;
await cloudBlockBlob.UploadFromStreamAsync(file.OpenReadStream());

url.Add(cloudBlockBlob.Uri.AbsoluteUri);
}
else
{
_logger.LogInformation("5 mb max size allowed");
}
}
else
{
_logger.LogInformation("Only .doc format accepted");
}
}
person.URL = (urls.Count > 0) ? string.Join(" || ", urls) : null;
person.DocName = string.Join(" || ", name);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Error uploading");
}
}

Interface

 public interface IDocRepo
{
void Configure();
Task Upload(IFormFile[] doc);
}

PersonController

[HttpPost]
public async Task<IActionResult> Create([FromBody] Person person)
{
if (ModelState.IsValid)
{
try
{
_docRepo.CreateConfigure();
await _docRepo.Upload(person.DocUpload);
_context.Person.Add(person);
await _context.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
return CreatedAtAction("PersonCreated", new { id = person.Id }, person);
}

最佳答案

我对您的代码做了一些更改并删除了一些编译错误。看看这段代码。我能够上传文件(用 postman 测试)。我删除了一些配置代码(直接在代码中使用连接字符串”,但这不会影响主代码。

enter image description here

enter image description here

enter image description here人物模型

namespace WebApplication8.Models
{
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string URL { get; set; }
public string DocName { get; set; }
public IList<IFormFile> docs {get;set;}
}
}

删除请求模型

namespace WebApplication8.Models
{
public class DeleteRequest
{
public string container;
public IList<string> docs;
}
}

个人 Controller

[Route("api/Person")]
public class PersonController : Controller
{
private readonly ILogger<PersonController> _logger;
private readonly IDocRepo _docRepo;

public PersonController(ILogger<PersonController> logger, IDocRepo docRepo)
{
_logger = logger;
_docRepo = docRepo;
}

[HttpPost]
public async Task<IActionResult> Create([FromForm] Person person)
{
if (ModelState.IsValid)
{
try
{
_docRepo.Configure();
await _docRepo.Upload(person.docs);
//_context.Person.Add(person);
//await _context.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
return Ok();
}
else
{
return BadRequest();
}

}
}

[HttpDelete]
public async Task<IActionResult> Delete([FromBody] DeleteRequest deleteRequest)
{

if (ModelState.IsValid)
{
try
{
_docRepo.Configure();
await _docRepo.Delete(deleteRequest.docs);
}
catch (Exception ex)
{
throw ex;
}
return Ok();
}
else
{
return BadRequest();
}
}

IDocRepo 和 DocRepo

public interface IDocRepo
{
void Configure();
Task Upload(IList<IFormFile> pdfFiles);
Task Delete(IList<string> docs);
}

public class DocRepo : IDocRepo
{
private CloudStorageAccount storageAccount = null;
private CloudBlobContainer cloudBlobContainer = null;


private readonly ILogger<DocRepo> _logger;

public DocRepo(ILogger<DocRepo> logger)
{
_logger = logger;
}


public void Configure()
{
var AzConnectionString = "<<Add your connection string >>";

if (CloudStorageAccount.TryParse(AzConnectionString, out storageAccount))
{
try
{
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
cloudBlobContainer = cloudBlobClient.GetContainerReference("folder");
cloudBlobContainer.CreateAsync().GetAwaiter().GetResult();

BlobContainerPermissions permissions = new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
};
cloudBlobContainer.SetPermissionsAsync(permissions).GetAwaiter().GetResult();
}
catch (StorageException ex)
{
_logger.LogError("Error returned from the service: {0}", ex);
}
_logger.LogInformation("Success");
}
else
{
_logger.LogInformation("No Connection");
}
}



public async Task Upload(IList<IFormFile> docs)
{
//Person person = new Person();
//person.docs = new List<IFormFile>(docs);

List<string> url = new List<string>();
List<string> docName = new List<string>();

try
{
if (docs != null)
{
foreach (var file in docs)
{

if (file.ContentType == "application/msword")
{
if (file.Length < 5 * 1400 * 1400)
{
var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition);

var filename = parsedContentDisposition.FileName.Trim('"');
docName.Add(filename);

filename = Guid.NewGuid().ToString() + "-" + filename;

CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(filename);
cloudBlockBlob.Properties.ContentType = file.ContentType;
await cloudBlockBlob.UploadFromStreamAsync(file.OpenReadStream());

url.Add(cloudBlockBlob.Uri.AbsoluteUri);
}
else
{
_logger.LogInformation("5 mb max size allowed");
}
}
else
{
_logger.LogInformation("Only .doc format accepted");
}
}
//person.URL = (url.Count > 0) ? string.Join(" || ", url) : null;
//person.DocName = string.Join(" || ", file.);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Error uploading");
}
}
}

public async Task Delete(IList<string> docs)
{
foreach (var doc in docs)
{
try
{
CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(doc);
await blockBlob.DeleteIfExistsAsync();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error deleting blob " + doc);
}
}
}

更改了 Startup.cs 中的代码段

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddScoped<IDocRepo, DocRepo>();
}

关于ASP.NET Web API Azure Blob 存储非结构化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54498973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com