gpt4 book ai didi

c# - Asp.Net MVC 在Edit Get中编辑一张上传的图片(HTTPPostedFileBase)

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:58 24 4
gpt4 key购买 nike

这是我第一次在 ASP.NET MVC 中处理文件上传,我已经能够上传图像,调整它的大小,将它保存到服务器,重命名 src-string 以便 src 到图片反射(reflect)产品名称(例如:“ProductImages/Original/FIFA14.jpg”)。图像 src 也存储在数据库中,我用它来使用 Url.Action() 在 View 中显示图像。

对于我的编辑帖子,我希望用户能够像往常一样更改产品信息。并且每次用户提交表单时,之前上传的图像将被上传的新图像文件覆盖。

当我进入编辑产品获取 View 时,文件输入显示“没有选择文件”。我希望它显示用户之前从本地计算机创建产品时上传的图像文件。

真的有办法吗?如何做?

这是我在编辑 View 中输入的文件:

       <div class="form-group">
@Html.LabelFor(model => model.ProductImageViewModel.ImageUpload, new { @class = "control-label col-md-2" })
<div class="col-md-10">
<input type="file" name="imageUpload" id="imageUpload" />
@Html.ValidationMessageFor(model => model.ProductImageViewModel.ImageUpload)
</div>
</div>

Edit Get的Controller方法:

 // GET: /Product/Edit/5
public ActionResult Edit(Guid id)
{
Product product = _productRepository.GetById(id);


var productViewModel = new ProductViewModel
{
Id = product.Id,
Name = product.Name,
Description1 = product.Description1,
Description2 = product.Description2,
Description3 = product.Description3,
Status = product.Status,
Image = product.Image,
Weight = product.Weight,
Price = product.Price,
ReleaseDate = product.ReleaseDate,
Category = product.Category,
Categories = GetCategoryDropDownListForEdit(product),
ProductStatuses = GetStatusDropDownListForEdit(product),
};



return View(productViewModel);
}

这是我在 Create 方法中上传图像的方式:

// POST: /Product/Create
[HttpPost]
public ActionResult Create(ProductViewModel model, HttpPostedFileBase imageUpload)
{
if (UploadedFileIsValidImage(imageUpload))
{
byte[] productPicture = new byte[imageUpload.ContentLength];
imageUpload.InputStream.Read(productPicture, 0, imageUpload.ContentLength);

WebImage img = new WebImage(imageUpload.InputStream);
img.Resize(200, 200);

var fileName = imageUpload.FileName;

string imageName = model.Name;
string extension = Path.GetExtension(fileName);


var productImageFileName = imageName + extension;

img.FileName = productImageFileName;
var filePathOriginal = Server.MapPath("~/ProductImages/Originals");
var filePathThumbNail = Server.MapPath("~/ProductImages/ThumbNails");
string savedImageFileName = Path.Combine(filePathOriginal, productImageFileName);
img.Save(savedImageFileName);
model.ProductImageViewModel.ImageSrc = savedImageFileName;
model.Image = savedImageFileName;


try
{
var guid = new Guid(model.SelectedCategory);
_manager.AddProduct(
model.Name, model.Description1, model.Description2, model.Description3, Convert.ToDecimal(model.Price),
Convert.ToDateTime(model.ReleaseDate),
Convert.ToDouble(model.Weight), model.ProductImageViewModel.ImageSrc, guid);
_categoryRepository.Save();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
else
{
model.Categories = CategoryDropDownListForCreate();
return View(model);
}
}

那么我怎样才能让输入在文件输入中显示这个产品当前上传的文件呢?

最佳答案

您不能这样做,因为这是一个安全问题。如果您尝试通过 javascript 设置它使用以下代码

<script type="text/javascript">
document.forms["form1"].elements["uploadImage"].value = "C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg";

</script>

如果你可以检查你的浏览器控制台,它会输出错误消息说

SecurityError:操作不安全。

关于c# - Asp.Net MVC 在Edit Get中编辑一张上传的图片(HTTPPostedFileBase),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23466536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com