2013-04-30 165 views
1

我很難相信沒有辦法獲取正在上傳到MVC3服務器的文件的完整路徑(我讀過這是出於安全目的) 。在MVC 3中獲取上傳文件的文件路徑

有沒有解決辦法?我正在編寫一個小應用程序,用戶將在其中上傳文件,在屏幕上對其進行編輯,然後將其保存回原始位置。有沒有人有這樣做的好方法?我必須使用HttpPostedFileBase以外的東西嗎?

+3

如在用戶PC上的原始位置?是啊......你不會那麼做。而且,將其下載回原始位置將會非常棘手,因爲大多數瀏覽器不會再詢問保存文件的位置。 除非您的意思是文件最終保存到服務器上的「完整路徑」 – KingCronus 2013-04-30 14:11:45

回答

5

不可能。 Web服務器只能知道用戶的Web瀏覽器願意告訴它的文件,並且除了文件內容外,任何當前瀏覽器只會提供原始文件名。客戶端PC上的文件路徑永遠不會發送到服務器。作爲安全防範措施,似乎也不可能通過客戶端Javascript獲取此信息。

此外,網絡服務器將無法控制,其中在用戶的PC上將(保存)(重新)下載的文件,因此具有該路徑信息無論如何都沒有什麼用處。

0

獲取文件名和路徑,你可以這樣做::

foreach (string filesData in Request.Files) 
    { 
     var fileNm = Request.Files[filesData].FileName; 
     HttpPostedFileBase hpf = Request.Files[filesData] as HttpPostedFileBase; 
     string filePath = Path.Combine(HttpContext.Server.MapPath("~//Your Folder Path//")); 
     hpf.SaveAs(filePath + fileNm); 
} 

希望這將幫助你..

0

不可能的,沒有辦法與客戶端文件進行播放。首先,您需要在服務器上上傳文件,並從那裏對其執行操作,然後再保存在客戶端計算機上。

@using (Html.BeginForm("EditImage", "Home", FormMethod.Post, new { enctype = "multipart/form- data" })) 
    { 

    } 

和控制器,你可以有你的操作方法是這樣的:

[HttpPost] 
    public ActionResult EditImage(AddNewProductModel model, HttpPostedFileBase file) 
    { 

    } 

希望這個解決方案將幫助你。