我至少要求现在根据.net核心网站的用户名创建子目录,我想知道哪里是最好的地方?
我尝试在ApplicationUser中添加,我不知道如何正确添加它,我所知道的是完全错误的是以下内容。
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using System.IO;
namespace BRSCRM.Models
{
// Add profile data for application users by adding properties to the ApplicationUser class
public class ApplicationUser : IdentityUser
{
private IHostingEnvironment hostingEnvironment;
public string HomeDir { get; set; }
HomeDir=HostingEnvironment.WebRootPath + UserName;
string path = this.hostingEnvironment.WebRootPath + "\\uploads\\" + UserName;
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
}
我希望文档更好,看起来他们有很多入门材料,但是当你去尝试做一些没有覆盖的东西时,很难找到帮助。
我要做的是为成员提供supportfileuploading
我想我越来越近但我现在得到了这个错误。
'Microsoft.AspNetCore.Hosting.IHostingEnvironment'. Model bound complex types must not be abstract or value types and must have a parameterless constructor Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel(ModelBindingContext
我似乎无法阅读IHostingEnvironment webrootpath,令人沮丧!!
我将代码移到AccountController.cs中的Register操作中。
这是我到目前为止所拥有的......
if (result.Succeeded)
{
await _userManager.AddToRoleAsync(user, "Member");
_logger.LogInformation("User created a new account with password.");
//Add code here to create directory....
string webRootPath = _hostingEnvironment.WebRootPath;
string contentRootPath = _hostingEnvironment.ContentRootPath;
var userId = User.FindFirstValue(ClaimTypes.Email);
string path = webRootPath + "\\uploads\\" + userId;
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
删除了环境的代码,因为它没有工作,试图在我的本地系统上添加一个目录,发现我在索赔字段中没有得到任何内容,不知道如何获取用户名,电子邮件或其他任何内容它,这让我发疯,有人请在这里提出建议。
答案 0 :(得分:1)
代码是1)语法和2)意识形态不正确
1)以下代码必须采用某种方法,而不是模型class
定义
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
2) MVC 的主要思想是分离模型定义( M ),业务逻辑(控制器 C )和演示文稿(查看 V )。因此,代码的一部分应该位于首先需要文件夹的某个控制器中(例如AccountController
)并从(例如)[HttpPost]Register
操作调用。
private void SetUserFolder(ApplicationUser user)
{
IHostingEnvironment hostingEnvironment = /*getEnv()*/;
user.HomeDir = HostingEnvironment.WebRootPath + user.UserName;
string path = this.hostingEnvironment.WebRootPath + "\\uploads\\" + UserName;
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
}
答案 1 :(得分:0)
当用户上传文件时,是否满足您的要求,只检查文件夹是否存在,如果没有,则在保存文件之前创建文件?
例如,如果您的操作方法(假设MVC)是这样的:
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads
[HttpPost("UploadFiles")]
public async Task<IActionResult> Post(List<IFormFile> files)
{
long size = files.Sum(f => f.Length);
// full path to file in temp location
var filePath = Path.GetTempFileName();
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}
}
}
// process uploaded files
// Don't rely on or trust the FileName property without validation.
return Ok(new { count = files.Count, size, filePath});
}
您可以简单地使用自己的路径代替
var filePath = Path.GetTempFileName();
并检查它是否存在/如果需要,在保存之前创建它。