300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > HTML文件 图片 pdf上传预览

HTML文件 图片 pdf上传预览

时间:2022-06-13 08:25:29

相关推荐

HTML文件 图片 pdf上传预览

一、选择文件上传

上传文件的关键在input标签,以及获取文件并发送

<!--ng版本--><input hidden type="file" multiple="multiple" (change)="fileChange($event)" ><!--原生版本 用js监听change事件就好了--><input hidden type="file" multiple="multiple">

使用hidden属性将input标签隐藏,这样便于我们使用其他颜色,或者按钮来替代原生的样式。

而后使用label标签将按钮或者其他标签和input包裹起来。这样点击label即可直接触发input,类比,点击文字选择单选按钮。

<label><span>选择文件</span><input hidden type="file" multiple="multiple" (change)="fileChange($event)"></label>

只需替换或改变span标签,就可以做到最大程度自定义样式。

接下来js部分,只需监听input的change事件即可

//获取的是一个File列表,由于目前只上传一个文件,所以取第一个就可以了//ng-版本fileChange(e){let file=e.target["files"][0];}//原生jsdocument.getElementById('input').addEventListener('change',function(){let file=this['files'][0];})

file对象中有很多属性,我们可以取出来用,比如文件名,文件大小等等。能拿到这些东西,我们就能做预览。

二、预览

1、文件预览

将pdf拖入谷歌浏览器,原生使用的就是embed标签。非常好用的一个标签。

<!--ng版本--><embed *ngIf="pdfURL" id="pdf" [src]="pdfURL" type="application/pdf" width="300px" height="300px"/><!--原生版本(只能通过手动去设置display:none去显示隐藏这个标签了,意思都差不多)--><embed id="pdf" type="application/pdf" width="300px" height="300px"/>

注意type,不同的文件解析,使用不同的type。可以js做个判断去控制。这里不写了哈。

js部分主要是构造本地路径,替代src;

//原生只需要这样得到url,然后替换let url = window.URL.createObjectURL(file);//传入之前获取的file对象 //ng 则需要替换成安全路径,需要注入DomSanitizer将上述得到的url进行转换let pdfURL=this.sanitizer.bypassSecurityTrustResourceUrl(url); //因为绑定了src所以ng到这里就可以了//原生还需要设置document.getElementById('xxx').setAttribute('src',url);

createObjectURL() 方法需要做多兼容,可以百度一下查查,我这里直接使用这个方法可以直接创建url了。

最终change事件如下

//原生只需要这样得到url,然后替换let url = window.URL.createObjectURL(file);//ngfileChange(e){let file=e.target["files"][0];this.pdfURL=this.sanitizer.bypassSecurityTrustResourceUrl(url); }//原生jsdocument.getElementById('input').addEventListener('change',function(){let file=this['files'][0];document.getElementById('xxx').setAttribute('src',url);})

其实这样获取路径预览文件也可以预览图片

2、base64String预览图片

var reader=new FileReader();let imgUrl;reader.readAsDataURL(file);reader.onload=function () { imgUrl=reader.result}

将上述代码加入到change事件中即可获取图片的base64的路径,而后在onload里面替换src,一定要在onload里替换,不然拿不到图片路径。通用后面发送的ajax请求也就必须在这个里面进行或者,重新获取img的src去调接口,保证拿到base64String即可。

三、文件发送

最终发送文件方式采用ajax的formdata。这个可能根据不同项目进行调整,比如之前传图片使用 base64String。这里两种方式都会写出;

this.formData=new FormData();this.formData.append("file",file);

我们利用formData对象,直接将文件append进去。记得每次用完要清一下,以免下一次使用还是一样的文件。所以建议放在change时间里面,每次换文件都会new一个新的对象。

最后在ajax中发送:

this.ajax.excuteSend({path: `xxx`,method: "post",options:{headers: {contentType: "multipart/form-data"}},data:this.formData}).subscribe((rs: HttpResponse<any>) => {})}

这个是自己封装过一遍的ajax建议只做参考,主要注意 header里的设置,上传文件的头。

base64位就没什么好说的了,和字符串一样正常上传就好,让后端去解析就行了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。