2016-06-06 3 views
0

В настоящее время мы загружаем фотографию в WebMethod через javascript. Все работает отлично на местном уровне.System.IO.FileNotFoundException, когда проект развернут в стадии постановки, работает нормально локально

Тем не менее, когда я раскрываю это постановка, мы получаем следующее исключение: System.IO.FileNotFoundException Наш метод javascript выглядит следующим образом:

var formData = new FormData(); 
    formData.append('file', $('#photo')[0].files[0]); // Image 
    formData.append('c', i); 
    formData.append('t', t); 
    formData.append('i', uuid); 

     $.ajax({ 
      url: "/member/myserice/test.asmx/UploadImage", 
      type: "POST", 
      processData: false, 
      contentType: false, 
      data: formData, 
      success: function (response) { 
       alert('success'); 
      }, 
      error: function (er) { 
      alert('Unable to upload photo at this time, please try again later'); 
      } 
     }); 

Теперь, как вы можете видеть, мы сохраняем загруженное изображение внутри FormData (первый параметр)

Наша WebMethod выглядит следующим образом:

public string UploadImage() 
    { 

     var httpRequest = HttpContext.Current.Request; 

     var timestamp = httpRequest.Form["t"]; 
     var consumerId = httpRequest.Form["c"]; 
     var guid = httpRequest.Form["i"]; 
     var pic = System.Web.HttpContext.Current.Request.Files["file"]; 

     string fileName = Path.GetFileName(pic.FileName); // Breaks here when deployed to staging 

     var img = System.Drawing.Image.FromFile(pic.FileName); 

     //Removed additional code as it calls an external API. 

    } 

Теперь, как упоминалось ранее это работает отлично штраф на местном, но при развертывании на постановку я получаю исключение System.IO.FileNotFoundException на следующей строке:

string fileName = Path.GetFileName(pic.FileName); 

Теперь я пытался поиска в Интернете для данного раствора или подробное объяснение в почему и как исправить, но с не помогло, может кто-то пролить некоторый свет на то, что, если мне нужно изменить, чтобы это правильно функционировало.

Заранее спасибо.

ответ

1

Это работает локально, потому что и клиент, и сервер используют одну и ту же файловую систему и путь от $('#photo')[0].files[0] указывают на тот же файл на сервере. Вы не должны пытаться читать файл из файловой системы на стороне сервера, но использовать файловый поток из HttpContext


Вместо

var pic = System.Web.HttpContext.Current.Request.Files["file"]; 
    string fileName = Path.GetFileName(pic.FileName); // Breaks here when deployed to staging 
    var img = System.Drawing.Image.FromFile(pic.FileName); 

Используйте файловый поток закачанный от клиента:

var pic = System.Web.HttpContext.Current.Request.Files["file"]; 
var img = System.Drawing.Image.FromStream(pic.InputStream); 
+0

Я изменил код, чтобы теперь выглядеть следующим образом: var pic = httpRequest.Form ["file"]; но это выделяет несколько ошибок, которые находятся на строке fileName = Path.GetFileName (pic.FileName); говорит, что строка не содержит определения FileName –

+0

Вам не нужно пытаться получить файл из файловой системы. Вы должны получить поток или массив байтов из HttpContext. Я не могу представить более подробный пример сейчас (писать с мобильного, извините) –

+0

Нет проблем, позвольте мне рассказать и посмотреть, могу ли я найти некоторую информацию в Интернете. Будет обновлено соответственно –