从文件中获取原始文件名

7
我有一个接收System.File的操作。
public bool UploadToServer( File file )

我希望一旦文件到达服务器,可以使用文件的原始名称。我查看了MSDN的File类,但没有找到任何看起来可以获取文件名或文件路径的内容。是否可以从File中使用属性获取其原始名称,还是应该将签名设置为以下内容:

public bool UploadToServer( File file, string fileName )

解决方案

正如@Marko所建议的,我选择了HttpPostedFile。在我的项目资源中,我没有添加Server.Web,这就是导致问题的原因。


2
将客户端路径暴露给服务器可能会带来一些安全/隐私问题。 - James Thorpe
1
我确定Firefox会对上传文件的文件路径进行匿名处理,但你应该能够获取到文件名。File是抽象的,所以也许你需要使用派生类型。尝试使用FileStream代替。 - NibblyPig
完整路径仅由使用古老的网络浏览器的人暴露,因此您将无法在没有一些奇怪的解决方法的情况下完成此操作。 - Brad C
1
请参考此文章:http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx/ - user5135401
1个回答

20

尝试下面的代码,这样您就不需要关心路径或任何其他安全问题。

[HttpPost]
       public ActionResult Upload(HttpPostedFileBase file)
       {
           if (file != null && file.ContentLength > 0)
           {
               var fileName = Path.GetFileName(file.FileName);



               file.SaveAs(path);
           }
        }

找不到类型或命名空间,你在使用什么using - WWZee
1
HttpPostedFileBase位于System.Web中,在您的问题标签中指定了Asp.net MVC,您使用的是哪个版本? - Marko
@WayneOlinger,你不应该使用File,而是像Marko提到的那样,使用HttpPostedFileBase,然后你可以像他展示的那样获取文件名。 - user5135401
@Marko 我正在使用4,在另一个项目中,我可以毫无问题地使用HttpPostedFileBase,难道我没有设置正确的引用吗? - WWZee
1
@WayneOlinger,看起来你没有添加System.Web到项目引用中,尝试添加它并查看是否解决了你的问题。如果没有,请将此项目与正常工作的其他项目进行比较,看看有什么不同之处。 - Marko
1
@Marko,我会这样做的,感谢你的帮助。如果无法解决,我想我可能会使用注释建议,只需使用FileStream - WWZee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接