2016-06-13 4 views
0

Я изо всех сил стараюсь понять это, и вам необходимо посоветовать лучшие практики в отношении приложений MVC, которые читают файл клиента на компьютере пользователя. Моему приложению необходимо загрузить файл Excel на веб-сервер, а затем выполнить некоторую проверку в этом файле, я изо всех сил стараюсь, чтобы это работало, я знаю, что его риск для безопасности для чтения файлов с компьютеров пользователей, но как еще я могу это сделать задача, так как пользователям необходимо загрузить файл, чтобы приложение могло его обработать. Я попытался сохранить файл на сервере, но я получаю бесчисленное исключение, что либо файл, либо часть файла не может быть найден, либо пользователь файла не может получить доступ к файлу в IE и Chrome, я протестировал его на своей локальной машине и все, кажется, работает нормально, моя единственная проблема возникает, когда я развертываю ее на сервере. Я попытался запустить приложение под конкретным пользователем и предоставить этому пользователю доступ к папке приложения, где я сохраняю файл на веб-сервере, но все равно не работает, я попытался с помощью ApplicationPoolIdentity, но не подошел. Каков наилучший способ и рекомендуемый способ выполнения такой задачи в приложении MVC, размещенном в IIS8 на Windows Server 2012 R2. Ниже приведены методы, которые я пытался сохранить файл, но они не работают, как только они были развернуты.MVC-приложение, которое загружает файл пользователя на сервер

Метод 1 - Здесь я попытался с помощью Server.Map

public ActionResult Upload(HttpPostedFileBase file) 
    { 

     List<CleanSupplierClaim> supplierClaimsData = new List<CleanSupplierClaim>(); 

     try 
     { 
      if (file.ContentLength > 0) 
      { 

       var fileName = Path.GetFileName(file.FileName); 
       var targetPath = Server.MapPath(@"~/upload"); 

       file.SaveAs(Path.Combine(targetPath, fileName)); 

Метод 2 - Здесь я попытался сохранения в каталог приложений, где его размещенную.

List<CleanSupplierClaim> supplierClaimsData = new List<CleanSupplierClaim>(); 

     try 
     { 
      if (file.ContentLength > 0) 
      { 

       var fileName = Path.GetFileName(file.FileName); 


       var targetPath = @"\\servername\C$\inetpub\wwwroot\GpVisibilityUploadQA\upload\" + fileName; 
       file.SaveAs(targetPath); 

Каков наилучший способ для этого. Я действительно застрял. Пожалуйста помоги.

+2

Пожалуйста, разместите сообщение об ошибке, отправленное на сервер. – Win

+0

@Win Не удалось найти файл 'C: \ Users \ myname \ Documents \ Test_GP_Upload.xlsx'. Это в IE и не удалось найти файл 'c: \ windows \ system32 \ inetsrv \ GPUpload.xlsx'. это в Chrome. Любая идея, что здесь происходит, я определил loaction в моем приложении как var targetPath = Server.MapPath (@ "~/upload"); – Papi

ответ

0

Вот Razor синтаксис для окна быстрой загрузки (Предполагается, что домашний контроллер)

@using (Html.BeginForm("Upload", 
            "Home", 
            FormMethod.Post, 
            new { enctype = "multipart/form-data" })) 
{ 
    <label for="file">Upload File:</label> 
    <input type="file" name="file" id="file" /><br><br> 
    <input type="submit" value="Upload File" /> 
    <br><br> 
} 

А вот метод контроллер для получения байт [] для этого файла

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file) 
{ 
    BinaryReader b = new BinaryReader(file.InputStream); 
    byte[] binData = b.ReadBytes((int)file.InputStream.Length); 
} 

После того как вы байт [] вы можете просто написать его на temp на сервере и выполнить любые проверки/манипуляции, которые вы хотите

 Смежные вопросы

  • Нет связанных вопросов^_^