如何解决如何在图像上传时基于.NET Core中的用户名创建子文件夹?
我试图在每次用户注册时在已经创建的文件夹中创建一个子文件夹,以便用户上传的每个视频/图像都可以存储在该特定用户的文件夹中。我的问题是我无法由于某种原因,它可以正常工作。我有一个自动生成的控制器,可以添加用户,还有一种将图像上传到服务器的方法。
[HttpPost]
public async Task<ActionResult<User>> PostUser(User user)
{
_context.User.Add(user);
if (string.IsNullOrWhiteSpace(_env.WebRootPath))
{
_env.WebRootPath = Path.Combine(Directory.GetCurrentDirectory(),"wwwroot");
}
if(user!=null)
{
var users = Path.Combine(_env.WebRootPath,"uploads",user.Name);
Directory.CreateDirectory(users);
}
await _context.SaveChangesAsync();
return CreatedAtAction("GetUser",new { id = user.IdUser },user);
}
在这里,我尝试在“上载”文件夹中创建一个子文件夹,因为当用户第一次上载图像时已经创建了另一个子文件夹。问题是无论我做什么,都不会创建它。最重要的是,我想直接将图像保存到用户文件夹中。目前,我只能将其保存在“上传”文件夹中。这是我上传图像的方法:
[HttpPost]
public async Task PostImage(IFormFile file)
{
if (string.IsNullOrWhiteSpace(_env.WebRootPath))
{
_env.WebRootPath = Path.Combine(Directory.GetCurrentDirectory(),"wwwroot");
}
var uploads = Path.Combine(_env.WebRootPath,"uploads");
if (!Directory.Exists(uploads)) Directory.CreateDirectory(uploads);
if (file.Length > 0)
{
using (var fileStream = new FileStream(Path.Combine(uploads,file.FileName),FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
}
}
我也尝试过在PostImage()方法中声明一个User属性,但是在我发布图像的那一刻,用户为null,因为在上传图像的同时进行了注册,因此自动运行将不起作用。我还尝试与客户端一起玩,检查用户是否已保存,然后继续上传文件,但没有任何运气。有人可以指出我正确的方向吗?
解决方法
很明显,当PostImage
存储图像时,您的路径仅到达uploads
文件夹,而不到达子文件夹,因此图像将仅存储在uploads
文件夹下。
如果要将图像存储在相应的uploads/username
文件夹中,还需要获取与当前上传的图像相对应的用户信息。
正如您所说,这是一个注册页面,因此用户的信息和图像可以同时传递给操作。您无需使用这两种post方法,只需将它们合并即可。
查看:
@model User
@{
ViewData["Title"] = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Index</h1>
<form method="post" asp-action="PostUserAndImage" enctype="multipart/form-data">
<input id="Text1" type="text" asp-for="IdUser" />
<input id="Text1" type="text" asp-for="Name" />
<input id="File1" type="file" name="file" />
<input id="Submit1" type="submit" value="submit" />
</form>
动作:
[HttpPost]
public async Task<ActionResult<User>> PostUserAndImage(User user,IFormFile file)
{
if (string.IsNullOrWhiteSpace(_env.WebRootPath))
{
_env.WebRootPath = Path.Combine(Directory.GetCurrentDirectory(),"wwwroot");
}
if (user != null)
{
_context.User.Add(user);
var users = Path.Combine(_env.WebRootPath,"uploads",user.Name);
if (!Directory.Exists(users)) Directory.CreateDirectory(users);
if (file.Length > 0)
{
using (var fileStream = new FileStream(Path.Combine(users,file.FileName),FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
}
await _context.SaveChangesAsync();
}
return CreatedAtAction("GetUser",new { id = user.IdUser },user);
}
这是测试结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。