您好,欢迎访问一九零五行业门户网

Golang 1.6: 使用jQuery.iframe-Transport.js做Ajax文件上传并处理multipart Form_html/css_WEB-ITnose

本文测试环境golang 1.6, jquery 1.12.3
之前写过一篇文章: jquery.iframe-transport.js来发送ajax文件上传请求对返回json的处理,就是讲使用这个jquery插件时对返回json数据的处理,该插件会内置一个 这样就可以实现 ajax的 multipart/form-data实现,注意这样做主要是为了兼容低版本浏览器,如果不考虑ie 所以代码还是和以前一样,如下(html):

javascript:
// 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()'); });});
接下来在golang中,处理这个 ,首先调用 http.request的 parsemultipartform方法来处理 multipart/form-data,参数是内存内的最大buffer大小,如果没有错误的话,返回一个 multipart.form对象,里面的 file属性会包含用户上传文件的信息,具体请参考 文档,这里我们通过 logmultipartform函数简单把里面的数据坐下输出,如下代码:
// 输出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) /* 后面省略 */}
示例输出:
values: map[x-requested-with:[iframe] x-http-accept:[application/json, text/javascript, */*; q=0.01]]files:key: avatarupload, filename: img_1156.jpg, header: map[content-disposition:[form-data; name=avatarupload; filename=img_1156.jpg] content-type:[image/jpeg]]
其它类似信息

推荐信息