Приложение MVC3 не может сохранить файлы в каталог без ошибок - PullRequest
0 голосов
/ 10 января 2012

Сначала я приведу краткое резюме, а затем добавлю подробности, как могу.

У меня приложение MVC3, работающее на двух серверах.Я позвоню им box1 и box2.На обоих серверах установлены одинаковые ОС, версии IIS, одно и то же приложение, загруженное из Subversion.box1 работает абсолютно без нареканий.Он может выполнять загрузку по пути, указанному в web.config.Однако, когда я пытаюсь загрузить, используя box2 , каталог создается , поэтому мой оператор Path.Combine работает нормально, но фактический загружаемый файл никогда не создается.

Я надеваюне появляется никакого сообщения об ошибке, загрузка просто не происходит вообще.Я думал, что это связано с настройкой приложения для пути.Я подумал, что box2 (в другом домене) не имеет прав.Это неверно по двум причинам

  1. Я получаю ошибку «Отказано в доступе», когда задаю путь к чему-то недоступному.
  2. Я даже пытался сохранить в box2 прямо на жестком диске.Все еще только создает папку.

    [HttpPost]
    public ActionResult Upload(HttpPostedFileBase uploadfile, string id)
    {
    
            var dr405 = new DR405Service().GetDR405ById(new DR405DBContext(), DR405Profile.CurrentUser.TangiblePropertyId);
            var saveLocation = Path.Combine(DR405Service.SavePath + DR405Profile.CurrentUser.TangiblePropertyId);
            System.IO.Directory.CreateDirectory(saveLocation);
            if ((int)uploadfile.ContentLength / 1024 <= 15000)
            {
    
                uploadfile.SaveAs(Path.Combine(saveLocation, Path.GetFileName(uploadfile.FileName)));
                var file = new dr405files { TangiblePropertyId = DR405Profile.CurrentUser.TangiblePropertyId, FileName = uploadfile.FileName, UploadDate = DateTime.Now };
                //dr405.dr405files.Add(file); 
                //c.dr405s.Add(dr405);
    
                db.Entry(file).State = file.FileId == 0 ? EntityState.Added : EntityState.Modified;
                //db.Entry(dr405).State = EntityState.Modified;
    
                new DR405Service().Save(db);
                ViewData["UploadStatus"] = String.Format("File name: {0}, {1}Kb Uploaded Successfully.", uploadfile.FileName, (int)uploadfile.ContentLength / 1024);
            }
            else
            {
                ViewData["UploadStatus"] = String.Format("File exceeds 15MB upload limit.  Please reduce size and try again.", uploadfile.FileName);
            }
    
    
        return View();
    }
    

Вот несколько препятствий, с которыми я борюсь

  • box2 - рабочий сервер, поэтому яНе удается установить удаленный отладчик
  • box2 размещен в другой группе, и я должен сказать им, как его настроить.Они не смогут или не смогут понять, как это исправить.

Обновление

Хотя это не самый элегантный код, он работает просто отлично.

enter image description here

Обновление # 2

Я изменил свое действие, чтобы выполнить перенаправление в Google, поскольку на самом деле я пока не могу запустить отладчик на удаленном сервере.Я обнаружил, что на box1 происходит перенаправление.На box2 перенаправление не происходит.Это дает мне основную уверенность в том, что действие контроллера даже не вызывается box2.Как это может быть?

[HttpPost]
public ActionResult Upload(HttpPostedFileBase uploadfile)
{
    Response.Redirect("http://www.google.com");
        var dr405 = new DR405Service().GetDR405ById(new DR405DBContext(), DR405Profile.CurrentUser.TangiblePropertyId);
        var saveLocation = Path.Combine(DR405Service.SavePath  + DR405Profile.CurrentUser.TangiblePropertyId);
        System.IO.Directory.CreateDirectory(saveLocation);
        if ((int)uploadfile.ContentLength / 1024 <= 15000)

Обновление # 3

Независимо от того, какая из этих версий Path.Combine я использую, это ничего не меняет.Пожалуйста, перечитайте вопрос.Action даже не вызывается на box2.enter image description here

1 Ответ

0 голосов
/ 10 января 2012

Изменение

var saveLocation = Path.Combine(DR405Service.SavePath + DR405Profile.CurrentUser.TangiblePropertyId);

до

var saveLocation = Path.Combine(DR405Service.SavePath, DR405Profile.CurrentUser.TangiblePropertyId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...