我创建了一个MVC应用程序,您可以在其中上传图像。我将它们存储在文件系统中,如果文件存在,我正在显示它并且我没有使用SQL来跟踪文件。
我有一个带有foreach的IList字符串显示它们。但现在我需要删除特定的图像,我不知道如何在MVC中实现它,因为我只能通过imagename来识别图像。
有人可以告诉我在我的场景中管理照片的最佳方式。提前谢谢
答案 0 :(得分:4)
你问了一个例子,所以我们走了。 让我们想象你想删除存储在“/pics/path/mypic.jpg”中的图片。 首先你要打电话
string path = Server.MapPath("/pics/path/mypic.jpg");
获取图片的物理路径并将其存储在路径变量中。 然后你可以这样做:
FileInfo fi = new FileInfo(path);
if(fi.Exists)
fi.Delete();
else
what you want to do if file does'nt exists.
注意:如果文件不存在,fi.Delete()不会抛出异常。
要获取目录中所有文件的列表,您可以使用Directory.GetFiles()或DirectoryInfo实例。
答案 1 :(得分:1)
您需要查看System.Web.HttpServerUtility.MapPath。您可以为它提供图像的虚拟路径(/images/picture.jpg),它将返回绝对路径(C:\ web \ mysite \ images \ picture.jpg)。现在您可以删除图像。
答案 2 :(得分:0)
不确定理解问题,MVC或其他:这并不重要。 Image是服务器上的文件,因此您可以像删除任何其他文件一样删除它,例如使用Server.Mappath来解析FileInfo并在其上播放Delete。
答案 3 :(得分:0)
现在很确定如何解释你的问题... MVC似乎完全脱离了背景。
但是......正如我所看到的,你有一个名为ImageController的控制器,其中一个Action叫做Delete。该操作接受一个FormCollection参数,该参数在调用时包含图像的名称。
因此,当您删除时,您有一个表单对ImageController执行POST - >删除操作并使用它传递图像的名称。图像的名称包含在隐藏字段中。
作为旁注:使用名称作为身份可能不是一个好主意。一个原因是目录遍历攻击。提供" ... / .. / .. /"而不是图像名称。如果您对输入的数据进行白名单/验证不太好,那么很可能会发生这种攻击。