AjaxFileUpload.js はあまり有名なプラグインではありません。これは他の人が作成し、誰でも使用できるようにリリースされています。その原理は、非表示のフォームと iframe を作成し、JS を使用してそれらを送信し、戻り値を取得することです。
私はもともと非同期アップロード関数を作成しました。その設定方法が jQuery の AJAX に似ているため、これを選択しました。これは非常に気に入っています。
コメントで言われていることは機能しません。それは、同じ js を使用していないからです。 github で AjaxFileUpload を検索すると、同様の JS がたくさん見つかりました。
ajaxFileUpload は、非同期ファイルアップロード用の jQuery プラグインです
不明なバージョンをアップロードすると、今後どこでもそのバージョンを探す必要がなくなります。
構文:$.ajaxFileUpload([options])
optionsパラメータの説明:
1, url アップロードハンドラのアドレス。
2, fileElementId アップロードする必要があるファイル フィールドの ID、つまり の ID。
3, secureuri 安全な送信を有効にするかどうか、デフォルトは false です。
4, dataType サーバーから返されるデータ型。 XML、スクリプト、JSON、HTML を使用できます。入力しない場合は、jQuery が自動的に判断します。
5、成功 送信成功後に自動的に実行される処理関数です。パラメータデータはサーバーから返されるデータです。
6、エラー 送信失敗時に自動的に実行される処理関数。
7、データ カスタムパラメータ。アップロードした画像に関連するデータがある場合は、こちらの方が便利です。
8、カスタムパラメータを送信するときは、このパラメータをpostに設定する必要があります
エラーメッセージ:
1. SyntaxError: missing; before state error
このエラーが発生した場合は、URL パスがアクセス可能かどうかを確認する必要があります。
2. SyntaxError: 構文エラー
このエラーが発生した場合は、送信操作を処理するサーバー バックグラウンド ハンドラーに構文エラーがあるかどうかを確認する必要があります
3. SyntaxError: 無効なプロパティ ID エラー
このエラーが発生した場合は、テキスト フィールドの属性 ID が存在するかどうかを確認します
4. XML 式エラーで SyntaxError: missing } を使用します
このエラーが発生した場合は、ファイル名が一致しているかどうかを確認する必要があります
他のカスタム エラー
を使用できます。変数 $error を直接出力して、各パラメータが正しいかどうかを確認する方が、上記の無効なエラー プロンプトよりもはるかに便利です。
使用方法:
ステップ 1: まず、jQuery プラグインと ajaxFileUpload プラグインを導入します。言うまでもなく、これはすべてのプラグインに当てはまります。
<script src="jquery-1.7.1.js" type="text/javascript"></script> <script src="ajaxfileupload.js" type="text/javascript"></script>
ステップ 2: HTML コード:
<body> <p><input type="file" id="file1" name="file" /></p> <input type="button" value="上传" /> <p><img id="img1" alt="上传成功啦" src="" /></p> </body>
ステップ 3: JS コード
<script src="jquery-1.7.1.js" type="text/javascript"></script> <script src="ajaxfileupload.js" type="text/javascript"></script>
ステップ 4: バックエンド ページの Upload.aspx コード:
protected void Page_Load(object sender, EventArgs e) { HttpFileCollection files = Request.Files; string msg = string.Empty; string error = string.Empty; string imgurl; if (files.Count > 0) { files[0].SaveAs(Server.MapPath("/") + System.IO.Path.GetFileName(files[0].FileName)); msg = " 成功! 文件大小为:" + files[0].ContentLength; imgurl = "/" + files[0].FileName; string res = "{ error:'" + error + "', msg:'" + msg + "',imgurl:'" + imgurl + "'}"; Response.Write(res); Response.End(); } }
ダウンロードこの例の完全なコード
MVC バージョンの例を見てみましょう:
コントローラー コード
public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult Upload() { HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files; string imgPath = ""; if (hfc.Count > 0) { imgPath = "/testUpload" + hfc[0].FileName; string PhysicalPath = Server.MapPath(imgPath); hfc[0].SaveAs(PhysicalPath); } return Content(imgPath); } }
フロントエンド ビュー、HTML および JS コード アップロードが成功した後、画像の実際のアドレスを返し、 SRC アドレスにバインドします
<html> <head> <script src="/jquery-1.7.1.js" type="text/javascript"></script> <script src="/ajaxfileupload.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $(":button").click(function () { if ($("#file1").val().length > 0) { ajaxFileUpload(); } else { alert("请选择图片"); } }) }) function ajaxFileUpload() { $.ajaxFileUpload ( { url: '/Home/Upload', //用于文件上传的服务器端请求地址 secureuri: false, //一般设置为false fileElementId: 'file1', //文件上传空间的id属性 <input type="file" id="file" name="file" /> dataType: 'HTML', //返回值类型 一般设置为json success: function (data, status) //服务器成功响应处理函数 { alert(data); $("#img1").attr("src", data); if (typeof (data.error) != 'undefined') { if (data.error != '') { alert(data.error); } else { alert(data.msg); } } }, error: function (data, status, e)//服务器响应失败处理函数 { alert(e); } } ) return false; } </script> </head> <body> <p><input type="file" id="file1" name="file" /></p> <input type="button" value="上传" /> <p><img id="img1" alt="上传成功啦" src="" /></p> </body> </html>
最後に、パラメーターを使用して画像をアップロードする例を示します。 コントローラー コード:
public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult Upload() { NameValueCollection nvc = System.Web.HttpContext.Current.Request.Form; HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files; string imgPath = ""; if (hfc.Count > 0) { imgPath = "/testUpload" + hfc[0].FileName; string PhysicalPath = Server.MapPath(imgPath); hfc[0].SaveAs(PhysicalPath); } //注意要写好后面的第二第三个参数 return Json(new { Id = nvc.Get("Id"), name = nvc.Get("name"), imgPath1 = imgPath },"text/html", JsonRequestBehavior.AllowGet); } }
インデックス ビュー コード:
<html> <head> <script src="/jquery-1.7.1.js" type="text/javascript"></script> <script src="/ajaxfileupload.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $(":button").click(function () { if ($("#file1").val().length > 0) { ajaxFileUpload(); } else { alert("请选择图片"); } }) }) function ajaxFileUpload() { $.ajaxFileUpload ( { url: '/Home/Upload', //用于文件上传的服务器端请求地址 type: 'post', data: { Id: '123', name: 'lunis' }, //此参数非常严谨,写错一个引号都不行 secureuri: false, //一般设置为false fileElementId: 'file1', //文件上传空间的id属性 <input type="file" id="file" name="file" /> dataType: 'json', //返回值类型 一般设置为json success: function (data, status) //服务器成功响应处理函数 { alert(data); $("#img1").attr("src", data.imgPath1); alert("你请求的Id是" + data.Id + " " + "你请求的名字是:" + data.name); if (typeof (data.error) != 'undefined') { if (data.error != '') { alert(data.error); } else { alert(data.msg); } } }, error: function (data, status, e)//服务器响应失败处理函数 { alert(e); } } ) return false; } </script> </head> <body> <p><input type="file" id="file1" name="file" /></p> <input type="button" value="上传" /> <p><img id="img1" alt="上传成功啦" src="" /></p> </body> </html>
画像を非同期でアップロードしているときに、カスタム送信パラメータがポップアップ表示されます。この例のダウンロード アドレス
2013 年 1 月 28 日、今日のデバッグ プロセス中に問題が発見されました。つまり、ファイル フィールド () として、name 属性が必要です。 name属性が無い場合、アップロード後サーバーが画像を取得できません。例: 正しい書き方は
2013 年 1 月 28 日、最も典型的なエラーの原因がついに判明しました。オブジェクト関数 (a,b){return new e.fn.init(a,b,h)} にはメソッド 'handleError' がありません。これは非常に古典的なエラーです。それは私のバージョンの問題かどうかです。この問題の根本原因は、N 回のアップロード後に判明しました。答えは、dataType パラメータは大文字である必要があります。例: dataType: 'HTML'。
2016-07-28、コメントのエラー: TypeError: $.ajaxFileUpload is not a function 同じ JS を使用していません。別の AJAXFileUpload をダウンロードしました。