我使用 dotnet8 创建了新的 asp.net core Web API 项目。 我想使用 wwwroot 作为我的网络根路径。 我将此行添加到我的program.cs中:
app.UseStaticFiles();
我尝试在 Service.cs 中获取 wwwroot 路径,但得到的是 null 而不是路径:
webHostEnvironment.WebRootPath
我也尝试将此行添加到我的program.cs中,但结果是相同的:
builder.WebHost.UseStaticWebAssets().UseWebRoot("wwwroot");
我知道我可以得到像 that 这样的路径,但我想使用正确的方式并且不使用 that 自定义。
我的服务是:
namespace Infrastructure.Services;
public class LocalFileService(IWebHostEnvironment webHostEnvironment, ILogger<LocalFileService> logger) : IFileService
{
public async Task<string> SaveFromBase64(string content, FilePlaces place = FilePlaces.Web,
CancellationToken cancellationToken = default)
{
cancellationToken.ThrowIfCancellationRequested();
string path, result, filename = GetFileExtension(content);
switch (place)
{
default:
result = $"/products/{Guid.NewGuid():N}.{filename}";
path = Path.Combine(webHostEnvironment.ContentRootPath, "wwwroot", result);
logger.LogInformation("saving file {path}", path);
break;
}
await using var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write);
var bytes = Convert.FromBase64String(content);
await fileStream.WriteAsync(bytes, cancellationToken);
return result;
}
private static string GetFileExtension(string base64String)
{
var data = base64String.Substring(0, 5);
switch (data.ToUpper())
{
case "IVBOR":
return "png";
case "/9J/4":
return "jpg";
case "AAAAF":
return "mp4";
case "JVBER":
return "pdf";
case "AAABA":
return "ico";
case "UMFYI":
return "rar";
case "E1XYD":
return "rtf";
case "U1PKC":
return "txt";
case "MQOWM":
case "77U/M":
return "srt";
default:
return string.Empty;
}
}
}
试试这个。
string basedir = AppDomain.CurrentDomain.BaseDirectory;
WebApplicationOptions options = new()
{
ContentRootPath = basedir,
Args= args,
WebRootPath = Path.Combine(basedir, "wwwroot")
};
var builder = WebApplication.CreateBuilder(options);