c# - 照片在上传 C# MVC 时损坏
问题描述
我在我的项目中有一个上传,当我上传照片时它没有显示。如果我尝试从 PC 上的文件夹打开它,它会说不支持该文件类型。这是一个.png
文件。
这是我的控制器代码:
string fileName = Path.GetFileName(expenseReportsDetails.ImageUpload.FileName);
var date = DateTime.Today;
var newdate = date.ToString("MM-dd-yyyy");
var lookup = db.CompanyNames.Where(a => a.CompanyId == com.CompanyId).FirstOrDefault();
string path = Server.MapPath("~/Documents/Expenses/" + lookup.AccountNumber + "/" + newdate + "/");
expenseReportsDetails.Receipt = fileName;
db.SaveChanges();
Boolean dirExist = System.IO.Directory.Exists(path);
if (!dirExist)
{
System.IO.Directory.CreateDirectory(path);
}
string file = Server.MapPath("~/Documents/Expenses/" + lookup.AccountNumber + "/" + newdate + "/" + fileName);
FilePath = file;
Boolean isexist = System.IO.File.Exists(file);
if (isexist)
{
var d = new FileInfo(file);
System.IO.File.Delete(file);
}
System.IO.File.Create(file);
它创建文件夹并将图像放在目录中,但图像不可见。
这是我获取文件的方式:
@Html.LabelFor(model => model.Receipt, htmlAttributes: new { @class = "control-label" })
<input type="file" name="ImageUpload" onchange="ShowPreview(this)" id="ImageUpload" />
<img src="~/Documents/Expenses/@Model.Receipt" alt="preview" style="width:100px;background-color:#d3d3d3;" id="imgbrowers" />
@Html.ValidationMessageFor(model => model.Receipt, "", new { @class = "text-danger" })
谢谢你的帮助!
解决方案
从您发布的代码来看,您似乎错过了一段将上传文件的内容写入服务器端创建的文件的代码。
您的代码System.IO.File.Create(file);
会返回一个 FileStream,您可以使用它将内容写入文件。通过从 HttpPostedFileBase 实例读取 InputStream,可以在控制器中访问上传文件的内容。像下面的东西
var uploadedFileStream=expenseReportsDetails.ImageUpload.FileStream;
using (FileStream fs = File.Create(path))
{
uploadedFileStream.CopyTo(fs);
}
请注意:我没有检查上面这段代码的工作,只是给你一个看的方向。如果您可以使用不同的方法将上传的文件写入服务器,您还可以查看其他答案,例如链接中的答案
推荐阅读
- java - 我们可以在我们的应用程序中播放我们的 YouTube 频道视频吗?
- excel - Power Query:在列中搜索关键字列表并仅返回具有至少一个匹配项的行的功能
- java - 像MathPow这样的Java方法,在效率上具有迭代和递归的解决方案-作业
- python - Python & Redis - 从 Redis 问题中设置/读取值的 Flask API
- c# - txt文件打不开
- r - 使用 plotly 绘制 3D 表面(使用 akima::interp 进行矩阵变换)
- c - pwntools 中的 p64() 无法正常工作
- asp.net-core - 使用 SignalR 集线器的服务的推荐生命周期
- javascript - 动态多输入选择下拉菜单更改后无法获取多个输入
按 DOM 属性 - javascript - k6 中的 sleep 功能是暂停所有虚拟用户的执行还是一次只暂停一个用户的执行?