Server.MapPath(FileUploadControl.FileName)未返回完整路径+文件名

时间:2017-08-11 16:59:35

标签: c# asp.net file server.mappath

我试图将文件的路径(包含文件名)保存到数据库列。想象一下,我的项目目录名为项目,我有一个名为附件的文件夹。

在我的代码中,我这样做是为了将文件上传到我选择的位置:

string filename = Path.GetFileName(FileUploadControl.FileName);
                    FileUploadControl.SaveAs(Server.MapPath("~/Attachments/") + filename);

这很好用,如果我打开那个文件夹,文件就在那里!现在我的问题是将path+filename保存到数据库列。我目前正在使用Server.MapPath(FileUploadControl.FileName),但是当我签入数据库列时,它只保存路径字符串,直到我的项目,如C:\[somepath]\Project\。 因此,它缺少附件文件夹和文件名。有帮助吗?我已经在这里阅读了很多关于FileUploadControl的主题,但没有任何帮助。 我正在使用ASP.NET C#和保存该信息的列类型在varchar(MAX)

2 个答案:

答案 0 :(得分:0)

使用Path.GetFileName代替Server.MapPath获取要存储在数据库中的文件名。

请注意,建议不要在DB中存储完整路径。根据我的经验,只存储相关路径的一部分就是您所需要的。

如果您在以下路径中存储文件:

C:\Application\Files\Documents\20170811\Myfile.txt

然后只将相关部分存储在DB中:

\Files\Documents\20170811\Myfile.txt

将C:\ Application部分放在应用程序的配置文件中,以获取/构建物理路径。使用此方法,如果将文件移动到另一个驱动器(D :),您只需更改配置即可。否则,您必须更新存储在数据库中的每个文件名/路径。

答案 1 :(得分:0)

我发现获得路径的唯一可靠方法是:

var inputFileDirectory = HttpContext.Current.Server.MapPath("~/Attachments/");

var fileName = System.IO.Path.GetFileName(fileUploader.PostedFile.FileName);

inputFileDirectory += fileName;

此方法适用于所有浏览器,因为IE和Edge会将PostedFile.FileName保存为完全限定路径,而其他浏览器只保存文件名。