我试图将文件的路径(包含文件名)保存到数据库列。想象一下,我的项目目录名为项目,我有一个名为附件的文件夹。
在我的代码中,我这样做是为了将文件上传到我选择的位置:
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)
答案 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保存为完全限定路径,而其他浏览器只保存文件名。