>我正在尝试将文件的路径(包含文件名(保存到数据库列。假设我的项目目录名为Project,那里有一个名为附件的文件夹。
在我的代码中,我这样做是为了将文件上传到我选择的位置:
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)
使用Path.GetFileName
而不是Server.MapPath
来获取要存储在数据库中的文件名。
请注意,不建议将完整路径存储在数据库中。 根据我的经验,仅存储路径的相关部分是您需要的。
如果要将文件存储在以下路径中:
C:ApplicationFilesDocuments20170811Myfile.txt
然后只将相关部分存储在数据库中:
FilesDocuments20170811Myfile.txt
将 C:\Application 部分放在应用程序的配置文件中,以便获取/构建物理路径。 使用此方法,如果将文件移动到另一个驱动器 (D:(,则只需更改配置即可。 否则,您必须更新存储在数据库中的每个文件名/路径。
我发现获取您提到的路径的唯一可靠方法是:
var inputFileDirectory = HttpContext.Current.Server.MapPath("~/Attachments/");
var fileName = System.IO.Path.GetFileName(fileUploader.PostedFile.FileName);
inputFileDirectory += fileName;
此方法适用于所有浏览器,因为IE和Edge会将PostedFile.FileName保存为完全限定的路径,而其他人将仅保存文件名。