2011-12-11 19 views
7

jquery ajaxをハンドラ(c#)で使用してファイルをアップロードしようとしています。問題は、私は、ハンドラを呼び出すときに、私はここで jqueryとハンドラ(ashx)を使用してアップロードファイル

context.Request.File.Count=0 

は、ASPXコードで取得するには、次のとおりです。

<!--aspx file code--> 
<script language="javascript" type="text/javascript"> 
$().ready(function() 
{ 
    $('#save').click(function (e) 
    { 
     CalluploaderHandler(); 
    }); 
}); 

function CalluploaderHandler() 
{ 
    $.ajax({ 
       type: "POST", 
       url: "Services/UPloader.ashx", 
       contentType: "application/json; charset=utf-8", 
       success: OnComplete, 
       error: OnFail 
      }); 
    return false; 
} 

function OnComplete(result) 
{ 
    alert('Success'); 
} 

function OnFail(result) 
{ 
    alert('Request failed'); 
} 

</script> 
    </head> 
     <body> 
      <form enctype="multipart/form-data"> 
       <label for="file"> 
       Filename:</label> 
       <input name="file" id="file" type="file"> 
       <input id="save" name="submit" value="Submit" type="submit"> 
      </form> 
     </body> 
    </html>  

C#のコードハンドラ:

/* handler*/ 
public void ProcessRequest(HttpContext context) 
{ 
    string savedFileName = ""; 

    foreach (string file in context.Request.Files) 
    { 
     HttpPostedFile hpf = context.Request.Files[file] as HttpPostedFile; 
     if (hpf.ContentLength == 0) 
      continue; 
     // savedFileName = context.Server.MapPath(Path.GetFileName(hpf.FileName)); 
     // hpf.SaveAs(savedFileName); 
    } 
    context.Response.Write(savedFileName); 
} 
+0

これまでにこれを得ることができましたか? – Adam

答えて

3

私は、問題がでていると思いますcontentType try

contentType: 'multipart/form-data', 

OR

contentType :'application/octet-stream'; 

あなたは、ハンドラファイルにこの種のコードを追加することができます

Sending multipart/formdata with jQuery.ajax

3

詳細については、この記事を参照してください。その後、このURLに投稿することができます(whateverroot/yourhandler.ashx)

コンテンツタイプは "multipart/form-data"である必要があります。 例: HTMLフォームタグを使用している場合は、enctype = "multipart/form-data"です。

public void ProcessRequest(HttpContext context) 
{ 
     var result = "0"; 
     try 
     { 
      if (context.Request.Files.Count > 0) 
      { 
       HttpPostedFile file = null; 

       for (int i = 0; i < context.Request.Files.Count; i++) 
       { 
        file = context.Request.Files[i]; 
        if (file.ContentLength > 0) 
        { 
         var fileName = Path.GetFileName(file.FileName); 
         var path = Path.Combine(<somepath>, fileName); 
         file.SaveAs(path); 
         result = "1"; 
        } 
       }  

      } 
     } 
     catch { } 
     context.Response.Write(result); 
} 
2

あなたのコード...

$.ajax({ 
    type: "POST", 
    url: "Services/UPloader.ashx", 
    contentType: "application/json; charset=utf-8", 
    success: OnComplete, 
    error: OnFail 
}); 

dataパラメータが欠落している..is。現在書かれている方法では、何もハンドラに送信されません。

dataパラメータを使用して、ファイルをハンドラに渡す必要があります。 このリンクを経由してください:http://www.aspdotnet-suresh.com/2015/02/jquery-upload-images-files-without-page-refresh-postaback-in-aspnet.html

関連する問題