2017-02-15 51 views
0

所以我,我不能改變下列方法:如何通過用戶選定的文件路徑作爲字符串

public async Task<User> UploadSaa(string filepath, User user) 
    { 

     Assembly cesCommon = Assembly.GetExecutingAssembly(); 
     byte[] saaBytes = null; 
     using (Stream saarStream = cesCommon.GetManifestResourceStream(name)) 
     using (MemoryStream saaMemoryStream = new MemoryStream()) 
     { 
      saaStream.CopyTo(saarMemoryStream); 
      saaBytes = saaMemoryStream.ToArray(); 
      user.Saa = saaBytes; 
     } 
     user = await SaveNewUser(user); 
     return user; 
    } 

在它以前的慣例,文件路徑直接以初始化數據庫傳遞給它供測試用。但是,現在我需要找到一種方法將生產中的變量字符串傳遞給UploadSaa(),b/c,用戶將從他們自己的系統中選擇他們自己的文件,並且我不能爲他們指定文件路徑。我試圖使用OpenFileDialog,但返回一個文件,而不是路徑

我的問題是:我如何修改OpenFileDialog接受文件的路徑,然後可以傳遞給UploadSaa?有更好的選擇嗎?如果我必須修改UploadSaa,那麼更改應該是什麼?

+1

據我所知,完整的文件路徑無法從瀏覽器由於安全原因過去了。我很困惑,爲什麼你想獲得用戶的本地文件路徑? –

+0

以便用戶可以將pdf文件上傳到數據庫。 –

+0

我已經發布了一個在asp.net上傳文件的答案mvc –

回答

0

您應該能夠從打開文件對話框object.FileName

OpenFileDialog object= new OpenFileDialog(); 
string fullPath = object.FileName; 

或者

您也可以考慮像使用的FolderBrowserDialog其他選項得到的完整路徑。

請參閱this示例。

我希望有幫助!

0

你的問題並不清楚,實際上你使用asp.net mvc發佈了標籤,並且你正在使用OpenFileDialog?這是與Windows窗體還是與Web應用程序相關?如果低於

嘗試後檢查,以使用HttpPostedFileBase,從那裏你可以得到的路徑

https://msdn.microsoft.com/en-us/library/system.web.httppostedfilebase.filename(v=vs.110).aspx

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file) 
{...} 

創建ModelBinder的

public class HttpOdometerPostedFileBaseModelBinder : IModelBinder 
    { 
     public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      if(controllerContext == null) 
       throw new ArgumentNullException(nameof(controllerContext)); 

      if(bindingContext == null) 
       throw new ArgumentNullException(nameof(bindingContext)); 

      HttpPostedFileBase theFile = controllerContext.HttpContext.Request.Files[bindingContext.ModelName]; 

      return theFile; 
     } 
    } 

和註冊它global.asax.cs

System.Web.Mvc.ModelBinders.Binders[typeof(HttpPostedFileBase)] = new HttpOdometerPostedFileBaseModelBinder(); 
0

我懷疑你通過查看你的代碼,你假設在web上獲取類似於桌面版本的文件。在桌面版本中,您可以獲得完整路徑並相應地讀取流。但在網絡中,瀏覽器將傳遞流(用於文件類型輸入)而不是傳遞文件路徑。所以,你只需要有可以捕捉你的文件流的動作。

你可以使用HttpPostedFileBase,它會給你流,文件名和內容長度。

您的操作方法應該是這樣的:

[HttpPost] 
public ActionResult MyUploadingAction(HttpPostedFileBase file) 
{ 
    var filename = file.FileName; 
    // For reading stream 
    var reader = new BinaryReader(file.InputStream); 
    byte[] byteData= reader.ReadBytes(file.InputStream.Length); 


    return View(); 
} 
相關問題