在MVC中删除图像的最佳方法是什么?

时间:2010-12-05 01:25:44

标签: asp.net-mvc-2

我创建了一个MVC应用程序,您可以在其中上传图像。我将它们存储在文件系统中,如果文件存在,我正在显示它并且我没有使用SQL来跟踪文件。

我有一个带有foreach的IList字符串显示它们。但现在我需要删除特定的图像,我不知道如何在MVC中实现它,因为我只能通过imagename来识别图像。

有人可以告诉我在我的场景中管理照片的最佳方式。提前谢谢

4 个答案:

答案 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 - >删除操作并使用它传递图像的名称。图像的名称包含在隐藏字段中。

作为旁注:使用名称作为身份可能不是一个好主意。一个原因是目录遍历攻击。提供" ... / .. / .. /"而不是图像名称。如果您对输入的数据进行白名单/验证不太好,那么很可能会发生这种攻击。

http://en.wikipedia.org/wiki/Directory_traversal