C# 上载图像asp.net内核
我是ASP.net COre的新手,我想上传一个文件(图像)并将其存储在一个安全文件夹中。我一直在关注这首图图(),但我不知道如何将它存储在一个文件中,它刚刚上传到服务器上 这是html:C# 上载图像asp.net内核,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,我是ASP.net COre的新手,我想上传一个文件(图像)并将其存储在一个安全文件夹中。我一直在关注这首图图(),但我不知道如何将它存储在一个文件中,它刚刚上传到服务器上 这是html: <form method="post" enctype="multipart/form-data" asp-controller="UploadFiles" asp-action="Index"> <div class="form-group"> <div class="
<form method="post" enctype="multipart/form-data" asp-controller="UploadFiles" asp-action="Index">
<div class="form-group">
<div class="col-md-10">
<p>Upload one or more files using this form:</p>
<input type="file" name="files" multiple />
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<input type="submit" value="Upload" />
</div>
</div>
我只需要将图像存储在如下文件夹中:C:\Users\DESKTOP-1603\DESKTOP\GestionSyndic\GestionSyndic\src\WebApplication1\wwwroot\images\
并更改图像的名称谢谢:D您应该插入
IHostingEnvironment
,这样您就可以获得web根目录(wwwroot
默认情况下)位置
public class HomeController : Controller
{
private readonly IHostingEnvironment hostingEnvironment;
public HomeController(IHostingEnvironment environment)
{
hostingEnvironment = environment;
}
[HttpPost]
public async Task<IActionResult> UploadFiles(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)
{
var uploads = Path.Combine(hostingEnvironment.WebRootPath, "images");
var fullPath = Path.Combine(uploads, GetUniqueFileName(formFile.FileName));
formFile.CopyTo(new FileStream(fullPath, FileMode.Create));
}
return Ok(new { count = files.Count, size, filePath });
}
private string GetUniqueFileName(string fileName)
{
fileName = Path.GetFileName(fileName);
return Path.GetFileNameWithoutExtension(fileName)
+ "_"
+ Guid.NewGuid().ToString().Substring(0, 4)
+ Path.GetExtension(fileName);
}
}
我不太确定为什么您要从中返回Ok结果。您可能会将重定向结果返回到列表页面。在ASP.NET Core MVC中通过简单的步骤上载文件 1.Demo.cshtml查看代码片段
<form method="post" enctype="multipart/form-data" asp-controller="Demo" asp-action="Index">
<div class="form-group">
<div class="col-md-10">
<p>Upload one or more files using this form:</p>
<input type="file" name="files" multiple />
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<input type="submit" value="Upload" />
</div>
</div>
调试时的快照
存储图像的文件夹的位置
只是使用了@Saineshwar接受的答案,但作为一种扩展方法进行了一点重构,以使IFromFile的使用变得简单
public static string MakeFileUniqueName(this IFormFile formFile)
{
if (formFile.Length > 0)
{
string fileName =
ContentDispositionHeaderValue.Parse(formFile.ContentDisposition).FileName.Trim('"');
// concatinating FileName + FileExtension
return Guid.NewGuid() + Path.GetExtension(fileName);
}
return string.Empty;
}
我们使用
ifformfile.OpenReadStream()
和ImageSharp来验证它是一个真实的图像文件。如果你不需要这个,你可以用这个:你的意思是什么“是否将其存储在文件中?你是说,你想将其存储在应用程序根目录中的特定文件夹中吗?抱歉,我是说我的应用程序根目录中的文件夹谢谢你的回答我现在面临的问题是,我添加了此代码,我只能将照片隐藏起来模型不再在控制器中提交问题是我没有收到任何错误传递给控制器的模型只是空的下面是整个问题此代码不可移植,反斜杠仅在Windows中工作,始终使用Path.Combine():Path+=$@“\{newFileName}”;//错误方式
此代码仅在更新文件名时有效。这行代码在mac上适用于我:fileName=Path.Combine(_environment.WebRootPath,“uploadImages”)+$@/{newFileName}代码>
<form method="post" enctype="multipart/form-data" asp-controller="Home"
asp-action="UploadFiles">
<div class="form-group">
<div class="col-md-10">
<p>Upload one or more files using this form:</p>
<input type="file" name="files" multiple />
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<input type="submit" value="Upload" />
</div>
</div>
</form>
<form method="post" enctype="multipart/form-data" asp-controller="Demo" asp-action="Index">
<div class="form-group">
<div class="col-md-10">
<p>Upload one or more files using this form:</p>
<input type="file" name="files" multiple />
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<input type="submit" value="Upload" />
</div>
</div>
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using System;
using System.IO;
using System.Net.Http.Headers;
namespace WebApplication6.Controllers
{
public class DemoController : Controller
{
private readonly IHostingEnvironment _environment;
// Constructor
public DemoController(IHostingEnvironment IHostingEnvironment)
{
_environment = IHostingEnvironment;
}
[HttpGet]
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Index(string name)
{
var newFileName = string.Empty;
if (HttpContext.Request.Form.Files != null)
{
var fileName = string.Empty;
string PathDB = string.Empty;
var files = HttpContext.Request.Form.Files;
foreach (var file in files)
{
if (file.Length > 0)
{
//Getting FileName
fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
//Assigning Unique Filename (Guid)
var myUniqueFileName = Convert.ToString(Guid.NewGuid());
//Getting file Extension
var FileExtension = Path.GetExtension(fileName);
// concating FileName + FileExtension
newFileName = myUniqueFileName + FileExtension;
// Combines two strings into a path.
fileName = Path.Combine(_environment.WebRootPath, "demoImages") + $@"\{newFileName}";
// if you want to store path of folder in database
PathDB = "demoImages/" + newFileName;
using (FileStream fs = System.IO.File.Create(fileName))
{
file.CopyTo(fs);
fs.Flush();
}
}
}
}
return View();
}
}
}
public static string MakeFileUniqueName(this IFormFile formFile)
{
if (formFile.Length > 0)
{
string fileName =
ContentDispositionHeaderValue.Parse(formFile.ContentDisposition).FileName.Trim('"');
// concatinating FileName + FileExtension
return Guid.NewGuid() + Path.GetExtension(fileName);
}
return string.Empty;
}