首页 > 解决方案 > 照片在上传 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" })

谢谢你的帮助!

标签: c#asp.net-mvc

解决方案


从您发布的代码来看,您似乎错过了一段将上传文件的内容写入服务器端创建的文件的代码。

您的代码System.IO.File.Create(file);会返回一个 FileStream,您可以使用它将内容写入文件。通过从 HttpPostedFileBase 实例读取 InputStream,可以在控制器中访问上传文件的内容。像下面的东西

var uploadedFileStream=expenseReportsDetails.ImageUpload.FileStream;
using (FileStream fs = File.Create(path))
{
     uploadedFileStream.CopyTo(fs);
}

请注意:我没有检查上面这段代码的工作,只是给你一个看的方向。如果您可以使用不同的方法将上传的文件写入服务器,您还可以查看其他答案,例如链接中的答案


推荐阅读