form表单提交上传图片

JavaScript09

form表单提交上传图片,第1张

上传图片我首先想到的是利用这个插件,webupload LUploade这类插件大多支持图片预览,断点/分片上传,功能比较丰富,但是由于后台原因我需要利用form表单进行上传图片,所以就整理了一下关于图片上传的几种方式: 1.form表单上传图片 表单上传遇到了一下几个问题: (1)进行表单提交时,无法获取返回值 (2)表单提交会进行页面刷新 为了解决这个问题,我想到了利用iframe进行解决,在form元素上直接添加target属性,使提交跳转页面直接跳转到iframe中,阻止页面进行跳转,返回结果也会呈现在 iframe框架之中,我们可以去除iframe中的返回值,前提是必须在同一个域名下。这样我们获取返回值就会拥有局限性。还好我反降了另外一种方法,jquery中jqueryj.form.js表单提交插件。我们可以直接这样来获取表单返回值。 form表单提交注意事项: (1).提供form表单,method必须是post。 (2).form表单的enctype必须是multipart/form-data。 javascript学习交流群:4538335s's's's'sssssssssssssss54 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码。HTML表单如何打包数据文件是由enctype这个属性决定的。enctype有以下几种取值: application/x-www-form-urlencoded:在发送前编码所有字符(默认)(空格被编码为’+’,特殊字符被编码为ASCII十六进制字符)。 multipart/form-data:不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 text/plain:空格转换为 “+” 加号,但不对特殊字符编码。 默认enctype=application/x-www-form-urlencoded,所以表单的内容会按URL规则编码,然后根据表单的提交方法: method=’get’ 编码后的表单内容附加在请求连接后, method=’post’ 编码后的表单内容作为post请求的正文内容。 (3).提供input type="file"上传输入域。 2.ajax无刷新上传  ajax和FormData可实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的 FormData接口。通过FormData对象可以更灵活方便的发送表单数据,因为可以独立于表单使用。如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过submit()方法传输的数据格式相同。 ajax无刷新上传 Ajax无刷新上传的方式,本质上与表单上传无异,只是把表单里的内容提出来采用ajax提交,并且由前端决定请求结果回传后的展示结果。 3.各类插件的使用: webupload LUPloader

办法1.同一个页面中建立两个表单 各自提交:

<form action="?" name="form1" id="form1">

<!-- 表单内容 -->

<input type="submit" />

</form>

<form action="?" name="form1" id="form1">

<!-- 表单内容 -->

<input type="submit" />

</form>

办法2:如果非要只有一个表单的话,通过js提交:

<script type="text/javascript" language="javascript">

function submitYouFrom(path){

$('form1').action=path

$('form1').submit()

}

</script>

<form action="?" name="form1" id="form1">

<!-- 表单内容 -->

<input type="button" value="提交1" onclick="submitYouFrom('地址一')"/>

<input type="button" value="提交2" onclick="submitYouFrom('地址二')"/>

</form>

ajax的表单提交只能提交data数据到后台,没法实现file文件的上传还有展示进度功能,这里用到form.js的插件来实现,搭配css样式简单易上手,而且高大上,推荐使用。

需要解释下我的结构, #upload-input-file 的input标签是真实的文件上传按钮,包裹form标签后可以实现上传功能, #upload-input-btn 的button标签是展示给用户的按钮,因为需要样式的美化。上传完成生成的文件名将会显示在 .upload-file-result 里面, .progress 是进度条的位置,先让他隐藏加上 hidden 的class, .progress-bar 是进度条的主体, .progress-bar-status 是进度条的文本提醒。

去掉hidden的class,看到的效果是这样的

[图片上传失败...(image-2c700a-1548557865446)]

将上传事件绑定在file的input里面,绑定方式就随意了。

var progress = $(".progress-bar"), status = $(".progress-bar-status"), percentVal = '0%'//上传步骤 $("#myupload").ajaxSubmit({ url: uploadUrl, type: "POST", dataType: 'json', beforeSend: function () { $(".progress").removeClass("hidden")progress.width(percentVal)status.html(percentVal)}, uploadProgress: function (event, position, total, percentComplete) { percentVal = percentComplete + '%'progress.width(percentVal)status.html(percentVal)console.log(percentVal, position, total)}, success: function (result) { percentVal = '100%'progress.width(percentVal)status.html(percentVal)//获取上传文件信息 uploadFileResult.push(result)// console.log(uploadFileResult)$(".upload-file-result").html(result.name)$("#upload-input-file").val('')}, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log(errorThrown)$(".upload-file-result").empty()} })

[图片上传失败...(image-3d6ae0-1548557865446)]

[图片上传失败...(image-9f0adf-1548557865446)]

更多用法可以 参考官网