关于form表单中上传文件的功能(jquery版和vue+iview 和vue+element-ui )三种版本
Posted on 2020-09-08 15:09 凡凡0410 阅读(994) 评论(0) 编辑 收藏 举报jquery版
效果
HTML
1 <button type="button" class="btn btn-primary selectfile mrb10" datatype="add">选择文件</button> 2 <p class="filename dib"> 3 <span></span> 4 <i class="fa fa-close cp hideflag removeFile"></i> 5 </p> 6 <input id="add-file" name="fileupload" class=" mrb10" type="file" value="" multiple="multiple" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" style="display:none;"/>
1 var formData = new FormData(),files=null; 2 $(".selectfile").click(function(){ 3 $("#add-file").trigger('click'); 4 }); 5 //添加文件
6 $("#add-file").off('change').on('change',function(){
7 $(".selectfile").button('loading'); 8 files = $(this).prop("files"); 9 var filename = files[0].name; 11 $(".filename span").html(filename); 12 $(".filename i").removeClass("hideflag"); 13 $("#labelValue").prop("disabled",true); 14 formData.append("file",files[0]); 15 $(".selectfile").button('reset'); 16 }); 17 //移除文件名 18 $(".removeFile").on("click",function(){ 19 $(".filename span").html(""); 20 $(".filename i").addClass("hideflag"); 21 $("#add-file").val(""); 22 $("#labelValue").prop("disabled",false); 23 }); 24 //为了避免同一文件不能反复多次上传的问题 25 //当上传文件是在一个弹窗里,在关闭modal的时候,进行初始化 26 $(".selectfile").button('reset').prop("disabled",false); 27 $("#labelValue").prop("disabled",false); 28 formData = new FormData(); 29 30 //向后台发送请求 31 formData = new FormData(); 32 formData.append("dt_json",params.dt_json); 33 formData.append("file",files[0]); 34 $.ajax({ //jquery的ajax提交 35 type: 'POST', 36 url: url, 37 async:false, 38 data: formData, //提交数据为表单对象 39 processData: false, //默认为 true,数据被处理为 URL 编码格式。如果为 false,则阻止将传入的数据处理为 URL 编码的格式。 40 contentType: false, //指 定 请 求 内 容 的 类 型 41 success: function (response, status, xhr) { //提交成功 42 43 }, 44 error: function (xhr, errorText, errorStatus) { //如果发生错误,返回错误信息 45 console.log(xhr, errorText, errorStatus) 46 } 47 });
Iview版
效果
HTML(iview中,对上传文件限制类型时, :format="['jpg','jpeg','png','gif']",文件不需要加 .)
<Upload class="dn" ref="upload"
action="https://XXXXXXX/XX/uploadPic" :on-success="fileFn" :max-size="10240"
:format="['jpg','jpeg','png','gif']" :on-error="errorFn" :on-exceeded-size="oversizeFn" :on-progress="progressFn">
<Button icon="ios-cloud-upload-outline" ref="uploadbtn">上传图片</Button>
</Upload>
JS(这是一个在quill编辑器中使用自定义上传的例子,将上传的图片插入在光标所在位置,如果不需要这样,直接获取fileFn中的response中的信息,类似于elemen-ui那种方式发送请求就可以了)
oversizeFn(file,filelist){ this.$Message.error('文件过大'); this.uploadLoading = false; }, progressFn(){ this.uploadLoading = true; }, fileFn(response,file,filelist){ let quill = this.$refs.myQuillEditor.quill; // 如果上传成功 if (response) { this.uploadLoading = false; this.imglists.push(response.rows); // 获取光标所在位置 let length = quill.getSelection().index; // 插入图片,res为服务器返回的图片链接地址 quill.insertEmbed(length, 'image', response.rows) // 调整光标到最后 quill.setSelection(length + 1) } else { // 提示信息,需引入Message this.$Message.error('图片插入失败') } }, errorFn(error){ console.log(error) },
Element-ui版
效果
HTML(限制文件类型 accept=".jpg,.png,.jpeg,.svg" 需要加 .)
<el-upload class="upload-demo f-r" action="123" :show-file-list="false" title="上传备案文件" :http-request="uploadfile" accept=".jpg,.png,.jpeg,.svg" >
<el-button size="small" type="primary" >点击上传</el-button>
</el-upload>
注意:可以直接在action上写请求后台的地址,也可以通过http-request,覆盖默认的上传行为,可以自定义上传的实现
JS
Element-ui版
在bussiness.api的js中
import { request } from '@/utils/request'
export const reqTaskRemarkUpload = async(query) => {
return await request({ url: '/business/upload_filing', method: 'post', data: query }); };
import {reqTaskRemarkUpload} from '@/api/bussiness.api'
export default { data() { return {} }, methods: { uploadfile(params){ let fd = new FormData() fd.append('file', params.file); fd.append('id',this.Id); fd.append('type',"type"); this.loadsuccess(fd); }, loadsuccess:async function(params){ let info = await reqTaskRemarkUpload(params); if(info){ this.$message.success("上传成功"); }; }, } }
值得注意的是:如果上传是在弹框中出现的,那么在需要重新打开弹框的时候,先要对原先上传的文件列表进行一下清空,比如(编辑的时候,回显了已有的上传文件,在新增的时候,需要将这个文件进行删除)