2013-03-18 3 views
0

В моем приложении MVC я могу позволить пользователю загружать PDF-файл, а загруженный файл сохраняется в папке. файл становится загружен правильно, но его не получить сохраняются в папке ... Посмотреть код:Файл не сохраняется.

<a class="upload" onclick="upload(this);"> 

function upload(box) { 
     var box = dhtmlx.modalbox({ 
      title: "Upload File", 
      text: "<div id='form_in_box'><div>Choose a PDF file to upload <hr/><label>Enter the URL <input type='file' name='file' id='file' style='width: 400px; height: 27px;'></label><br></div><div><span class='dhtmlx_button'><input type='submit' value='Upload File' style='width: 86px' onclick='save_file(this)'></span><span class='dhtmlx_button'><input type='button' value='Cancel' onclick='close_file(this)' style='width:80px;'></span></label></div></div>", 
      width: "300px" 
     }); 
    } 


function save_file(box) { 
     var filename = $("#filename").val(); 
     if (filename == "") { 
      alert("Enter the URL"); 
      return false; 
     } 
     dhtmlx.modalbox.hide(box); 
     dhtmlx.message("Uploading the file"); 
     $.post("/FileUpload/UploadURL", 
     { filename: '' + filename + '' }); 
    } 

код Контроллер:

public ActionResult UploadURL(FormCollection data) 
    { 
     var filename=data["filename"]; 
     SaveNewFile(filename); 
     return View(); 
    } 
public ActionResult SaveNewFile(string file) 
    { 

     var supportedType = new[] { "pdf" }; 
     var fileExt = System.IO.Path.GetExtension(file).Substring(1); 
     var filename = Path.GetFileNameWithoutExtension(file) ?? ""; 

     if (file.Length > 0 && supportedType.Contains(fileExt)) 
     { 

      string filePath = Path.Combine(HttpContext.Server.MapPath(_fileUploadPath), 
              Path.GetFileName(file)); 
      if (!System.IO.File.Exists(filePath)) 
      { 

       filePath = Server.MapPath(_fileUploadPath + file); 
       TempData["UploadValidationMessage_Success"] = "File upload Succeeded."; 
       return View(); 
      } 

      else 
      { 
       TempData["UploadValidationMessage_Failure"] = "File already exist."; 
       return View(); 
      } 
     } 
     else 
     { 

      TempData["UploadValidationMessage_Failure"] = "Only PDF files are supported. Try again..."; 
      return View(); 
     } 
    } 
+0

В этом случае, если я использую «HttpPostedFileBase» класс я получаю error..i.e. file = null – 2013-03-18 04:59:37

ответ

0

Используйте HttpPostedFileBase uploadFile параметр принять Загрузка файла и SaveAs(filePath);, чтобы сохранить!

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult FileUpload(HttpPostedFileBase uploadFile) 
{ 
    if (uploadFile.ContentLength > 0) 
    { 
     string filePath = Path.Combine(HttpContext.Server.MapPath("../Uploads"), 
             Path.GetFileName(uploadFile.FileName)); 
     uploadFile.SaveAs(filePath); 
    } 
    return View(); 
} 

изменить Также ваш JQuery Опубликовать в JQuery Ajax размещать

$('form').submit(function(event) { 
        event.preventDefault(); 
        var file = $("#filename").val(); 
        file = file.serialize(); 
        $.ajax({ 
         type: "POST", 
         contentType:attr("enctype", "multipart/form-data"), 
         url: "/FileUpload/UploadURL", 
         data: file, 
         success: function(data) 
         { 
          alert(data); 
         } 
        }); 

        return false; 
       } 
</script> 
+0

если я использую HttpPostedFileBase uploadFile am получают ошибку, то есть uploadFile = null – 2013-03-18 04:49:16

+0

Проверить отредактированный ответ ... Он должен работать сейчас! – Vitthal

+0

k..i попробуем вышеуказанный код – 2013-03-18 05:03:06

0

где в вашем коде вы на самом деле сохранения файла ??? Пользуйтесь использованием

Класс "HttpPostedFileBase".

Here's the sample Code

0

сначала нужно сказать ENCTYPE для формы. Без файла ENCTYPE не будет размещен на сервере

<form action="" method="post" enctype="multipart/form-data"> 
</form> 

для бритвы

@using (Html.BeginForm("Index", "yourCOntroller", FormMethod.POST, new { enctype = "multipart/form-data" })) 
{ 
    // some stuff 
}