ホームページ  >  記事  >  ウェブフロントエンド  >  Golang 1.6: jQuery.iframe-Transport.js を使用して Ajax ファイルのアップロードを実行し、マルチパート Form_html/css_WEB-ITnose を処理する

Golang 1.6: jQuery.iframe-Transport.js を使用して Ajax ファイルのアップロードを実行し、マルチパート Form_html/css_WEB-ITnose を処理する

WBOY
WBOYオリジナル
2016-06-21 08:48:491256ブラウズ

この記事のテスト環境は Golang 1.6、jQuery 1.12.3 です

以前記事を書きました: jQuery.iframe-Transport.js で Ajax ファイルのアップロード リクエストを送信し、返された JSON を処理する。この jQuery プラグインを使用する場合の返された JSON データの処理について説明します。このプラグインには、ajax の multipart/form-data 実装を実装できるようにするための組み込みの d5ba1642137c3f32f4f4493ae923989c が含まれます。これは主に以前のバージョンのブラウザとの互換性のためであることに注意してください。IE 10 未満を考慮しない場合は、このリンクを参照してください。

そのため、コードは同じです。次に、Golang でこの ff9c23ada1bcecdd1a0fb5d5a0f18437 を処理するには、まず http.Request の ParseMultipartForm メソッドを呼び出します。 multipart/form-data を処理するためのパラメータは、メモリ内の最大バッファ サイズです。エラーがなければ、multipart.Form オブジェクトを返します。内部の File 属性には、ユーザーがアップロードしたファイルの情報が含まれます。ここでは、次のコードに示すように、logMultipartForm 関数を通じて内部のデータを出力します。

<form id="avatarForm" enctype="multipart/form-data">    <input id="avatarUpload" name="avatarUpload" type="file" /></form>

出力例:

// avatarUpload是上面的type = “file”的input元素// 每当选择文件后立即发送Ajax请求$('#avatarUpload').change(function() {    //'upload'是具体发送POST请求针对的服务器URL    $.ajax('upload', {        type: 'POST',        files: $('#avatarUpload'),        iframe: true,        // 注意如果服务器返回结果是JSON,dataType要设置        dataType: 'json'    }).done(function(data) {        // 这里data是JavaScript对象        console.log('done()', data);    }).fail(function() {        console.log('fail()');    }).always(function() {        console.log('always()');    });});

// 输出multipart.Form内的数据func logMultipartForm(form *multipart.Form) {    log.Print("Values:", form.Value)    log.Print("Files:")    for key := range form.File {        headers := form.File[key]        for _, header := range headers {            log.Printf("Key: %v, Filename: %v, Header: %v", key, header.Filename, header.Header)        }    }}// 处理POST请求的Handler// Handler的声明可能根据不同路由HTTP框架而不一样func fileUploadHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) {    err := r.ParseMultipartForm(1024 * 50) //50kb buffer    if err != nil {        http.Error(w, err.Error(), http.StatusInternalServerError)        return    }    form := r.MultipartForm    logMultipartForm(form)    /* 后面省略 */}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。