2017-08-11 88 views
0

我試圖保存一個文件(包括文件名)到數據庫列的路徑。想象一下我的項目目錄叫做Project,那裏有一個名爲的文件夾附件Server.MapPath(FileUploadControl.FileName)不返回完整路徑+文件名

在我的代碼,我這樣做是爲了將文件上傳到我選擇的位置:

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

因此,您已經找到了一種可以讓您獲得完整路徑的方法。你爲什麼試圖使用別的東西來存儲數據庫中存儲的值?你的問題沒有說明的意義。 – JLRishe

回答

0

使用Path.GetFileName而不是Server.MapPath獲得在DB來存儲文件名。

請注意,不建議在DB中存儲完整路徑。根據我的經驗,僅存儲相關路徑的一部分就是您需要的。

如果你存儲在下面的路徑文件:

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

然後只存儲在數據庫中的相關部分:

\Files\Documents\20170811\Myfile.txt 

把C:在應用程序的配置文件\應用部分以獲得/建立物理路徑。使用這種方法,如果將文件移動到另一個驅動器(D :),則只需更改配置即可。否則,您必須更新您存儲在數據庫中的每個文件名/路徑。

+0

感謝編輯@Michelle,我是新手,正在學習所有標準和最佳實踐。 – JoeMc

0

的唯一可靠方法,我發現得到的路徑,你提到的是:

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

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

inputFileDirectory += fileName; 

此方法適用於所有的瀏覽器,如IE和邊緣將PostedFile.FileName保存爲一個完全合格的路徑,其他人將只保存文件名。

相關問題