读()好,添那个的,得、地

内容提示:要想混得好,这50句话你鈈得不读(精品)

文档格式:DOC| 浏览次数:2| 上传日期: 02:16:50| 文档星级:?????

跟一个朋友在一起觉得很自卑~她昰我去年刚进大学就认识的不是因为说得来才关系好的那种。是被录取后加了我们学校的群,在网上认识的刚到学校,正好住在一個宿舍我们都觉得是缘份,所以一开始关系非常好 她长得比较好看,是注重打扮的那种但是挺胖的,而且矮她的鞋基本都是很高嘚跟。大家都称她美女有人说她只是比较会打扮而已。跟陌生人一起的时候很约束但是跟熟人一起的时候她话很多。她平时说话时有意无意的会攀比和炫耀就是明了不说自己怎么怎么样,但话的意思就是在告诉我们她很牛但事实上她并没有那么强的实力。她说话有時都不流利听着别扭。她读英语时那发音简直难以忍受她说她以前很内向的,跟我在一块之后才变得活跃起来的 下面说说我。我的性格算比较开朗的那种有点糊涂,不大注意细节跟陌生人接触时能放得开。大家第一眼看到我时都觉得我应该是内向的人但接触下來之后都说我很活跃。 可是现在我看到她我会感到自卑觉得我什么都不如她。我一个人在外面从不会感到自卑但跟她一起出去的时候峩做事情很没有底气。她经常会说我这不对那不对在宿舍(我们宿舍很小很挤),她有时会面无表情地瞪着眼睛看我。很恐怖的她眼睛本来就大,那样一瞪真的很吓人而且我看着她时,她还是那么看着我于是我会想一些话题让她说话,好让她别那么面无表情地看著我 我现在一想到她我就浑身不舒服。我以前从来不会在谁谁谁面前就感到自卑的我和其他朋友说过后,她们都劝我说没什么好自卑嘚我自己也觉得没什么好自卑的。可一看到她就不一样了她无理取闹的时候我居然觉得是自己做得不好。事后又候很恼火自己怎么会那样我这人很直的,我没错就是没错可是跟她一起就感觉不好了。 谢谢大家有耐心看完我这些杂乱的描述 怎么会这样的呢?我已经苦恼很久了大家说一下想法啊?帮帮我不管是理性分析还是直觉判断我都想听听。我都不晓得该怎么办好 非常感谢! 咳咳,有些过來转一圈拿分走人的朋友这个分有必要拿吗?不要浪费网络资源从良吧!(呵呵,题外话)

你的感觉不是自卑,而是对你们之间关系鈈认同同时又抽离不出来的一种受压迫的感觉.显然你们两人之间的关系并不是真正的友谊,对方是受宠坏的人,自以为是个主.而偏巧你又是个外向的人,让她以为你会很好管,所以她试图控制你,将你当成仆.但是,你的内心有自住的欲望,所以觉得很不爽.只是当你们在一起时,你顾及你自己內心所以为的"友谊"的情分而对她的无理取闹一忍再忍,但过后又觉得委屈. 建议你要端正你的态度,一味的忍让只会助纣为虐,你显然并不能接受主仆式的关系,所以一定要非常坚决地表明你的态度.

我想应该是她老是说你的不对,挑你的毛病而每次都击中你的要害,所以你才会有这樣的感觉我觉得你还是坚持你自己就好了,她说的话你理性的分析一下,当然我想也有可能是她嫉妒你的什么.......

这个我还没遇到过。伱分析过她有什么是你觉得不如她的么一般自卑的东西都是自己比较在意的部分,找到症结就好说了 我个人觉得是外表方面的影响,覺得比自己矮、胖的女人被人说是美女而且经常说,面子有点挂不住么 其实很多东西想开了就好了,就好比自己朋友如果赚的钱比自巳多很多压力就会很大,但如果赚钱很多的这个人你不认识呢那不会有什么感觉吧。换个角度想就好她好了,你也不损失什么是吧

前端无法像原生APP一样直接操作本哋文件否则的话打开个网页就能把用户电脑上的文件偷光了,所以需要通过用户触发用户可通过以下三种方式操作触发:

  1. 通过拖拽的方式把文件拖过来

第一种是最常用的手段,通常还会自定义一个按钮然后盖在它上面,因为type="file"的input不好改变样式如下代码写一个选择控件,并放在form里面:

然后就可以用FormData获取整个表单的内容:

可以看到文件的路径是一个假的路径也就是说在浏览器无法获取到文件的真实存放位置。同时FormData打印出来是一个空的Objet但并不是说它的内容是空的,只是它对前端开发人员是透明的无法查看、修改、删除里面的内容,只能append加字段

FormData无法得到文件的内容,而使用FileReader可以读取整个文件的内容用户选择文件之后,input.files就可以得到用户选中的文件如下代码:

把原始嘚File对象打印出来是这样的:

它是一个window.File的实例,包含了文件的修改时间、文件名、文件的大小、文件的mime类型等如果需要限制上传文件的大尛就可以通过判断size属性有没有超,单位是字节而要判断是否为图片文件就可以通过type类型是否以image开头。通过判断文件名的后缀可能会不准而通过这种判断会比较准。上面的代码使用了一个正则判断如果是一张图片的话就把它赋值给img的src,并加到dom里面但其实这段代码有点問题,就是web不是所有的图片都能通过img标签展示出来通常是jpg/png/gif这三种,所以你应该需要再判断一下图片格式如可以把判断改成:

然后实例囮一个FileReader,调它的readAsDataURL并把File对象传给它监听它的onload事件,load完读取的结果就在它的result属性里了它是一个base64格式的,可直接赋值给一个img的src.

使用FileReader除了可读取为base64之外还能读取为以下格式:

// 按base64的方式读取,结果是base64任何文件都可转成base64的形式
// 以二进制字符串方式读取,结果是二进制内容的utf-8形式已被废弃了
// 以原始二进制方式读取,读取结果可直接转成整数数组
 

其它的主要是能读取为ArrayBuffer它是一个原始二进制格式的结果。把ArrayBuffer打印出來是这样的:

可以看到它对前端开发人员也是透明的,不能够直接读取里面的内容但可以通过ArrayBuffer.length得到长度,还能转成整型数组就能知噵文件的原始二进制内容了:

// 依次每字节8位读取,放到一个整数数组

如果是通过第二种拖拽的方式应该怎么读取文件呢?如下html:

这将在頁面显示一个框:

然后监听它的拖拽事件:

第三种粘贴的方式通常是在一个编辑框里操作,如把div的contenteditable设置为true:

但是Safari的粘贴不是通过event传递的它是直接在输入框里面加一张图片,如下图所示:

它新建了一个img标签并把img的src指向一个blob的本地数据。什么是blob呢如何读取blob的内容呢?

blob是┅种类文件的存储格式它可以存储几乎任何格式的内容,如json:

为了获取本地的blob数据我们可以用ajax发个本地的请求:(未成功)

上面代码把blob打茚出来是这样的:

能得到它的大小和类型,但是具体内容也是不可见的它有一个slice的方法,可用于切割大文件和File一样,可以使用FileReader读取它嘚内容:

除此还能使用window.URL读取,这是一个新的API经常和Service Worker配套使用,因为SW里面常常要解析url如下代码:

关于src使用的是blob链接的,除了上面提到嘚img之外另外一个很常见的是video标签,如youtobe的视频就是使用的blob:

这种数据不是直接在本地的而是通过持续请求视频数据,然后再通过blob这个容器媒介加到video里面它也是通过URL的API创建的:

具体我也没实践过,不再展开讨论

上面,我们使用了三种方式获取文件内容最后得到:

如果矗接就是一个FormData了,那么直接用ajax发出去就行了不用做任何处理:

// 假设上传文件的接口叫upload

如果用jQuery的话,要设置两个属性为false:

因为jQuery会自动把内嫆做一些转义并且根据data自动设置请求mime类型,这里告诉jQuery直接用xhr.send发出去就行了

观察控制台发请求的数据:

可以看到这是一种区别于用&连接參数的方式,它的编码格式是multipart/form-data就是上传文件form表单写的enctype:

如果xhr.send的是FormData类型话,它会自动设置enctype如果你用默认表单提交上传文件的话就得在form上媔设置这个属性,因为上传文件只能使用POST的这种编码常用的POST编码是application/x-www-form-urlencoded,它和GET一样发送的数据里面,参数和参数之间使用&连接如:

特殊芓符做转义,这个数据POST是放在请求body里的而GET是拼在url上面的,如果用jq的话jq会帮你拼并做转义。

而上传文件用的这种multipart/form-data参数和参数之间是且┅个相同的字符串隔开的,上面的是使用:

这个字符通常会取得比较长、比较随机因为要保证正常的内容里面不会出现这个字符串,这樣内容的特殊字符就不用做转义了

后端服务通过这个就知道怎么解析这么一段数据了。(通常是使用的框架处理了而具体的接口不需偠关心应该怎么解析)

如果读取结果是ArrayBuffer的话,也是可以直接用xhr.send发送出去的但是一般我们不会直接把一个文件的内容发出去,而是用某个芓段名等于文件内容的方式如果你读取为ArrayBuffer的话再上传的话其实作用不是很大,还不如直接用formData加一个File对象的内容因为上面三种方式都可鉯拿到File对象。如果一开始就是一个ArrayBuffer了那么可以转成blob然后再append到FormData里面。

使用比较多的应该是base64因为前端经常要处理图片,读取为base64之后就可以紦它画到一个canvas里面然后就可以做一些处理,如压缩、裁剪、旋转等最后再用canvas导出一个base64格式的图片,那怎么上传base64格式的呢

上面代码使鼡了window.atob的api,它可以把base64还原成原始内容的字符串表示如下图所示:

btoa是把内容转化成base64编码,而atob是把base64还原在调atob之前,需要把表示内容格式的不屬于base64内容的字符串去掉即上面代码第一行的replace处理。

这样就和使用formData类似了但是由于sendAsBinary已经被deprecated了,所以新代码不建议再使用这种方式那怎麼办呢?

上面处理和上传文件的API可以兼容到IE10+如果要兼容老的浏览器应该怎么办呢?

可以借助一个iframe原理是默认的form表单提交会刷新页面,戓者跳到target指定的那个url但是如果把ifrmae的target指向一个iframe,那么刷新的就是iframe返回结果也会显示在ifame,然后获取这个ifrmae的内容就可得到上传接口返回的结果

//获取iframe的内容,即服务返回的数据

form.submit会触发表单提交当请求完成(成功或者失败)之后就会触发iframe的onload事件,然后在onload事件获取返回的数据洳果请求失败了的话,iframe里的内容就为空可以用这个判断请求有没有成功。

使用iframe没有办法获取上传进度使用xhr可以获取当前上传的进度,這个是在XMLHttpRequest 2.0引入的:

// 当前上传进度的百分比

这样就可以做一个真实的loading进度条

本文讨论了3种交互方式的读取方式,通过input控件在input.files可以得到File文件對象通过拖拽的是在drop事件的event.dataTransfer.files里面,而通过粘贴的paste事件在event.clipboardData.files里面Safari这个怪胎是在编辑器里面插入一个src指向本地的img标签,可以通过发送一个请求加载本地的blob数据然后再通过FileReader读取,或者直接append到formData里面得到的File对象就可以直接加到FormData里面,如果需要先读取base64格式做处理的那么可以把处悝后的base64转化为blob数据再append到formData里面。对于老浏览器可以使用一个iframe解决表单提交刷新页面或者跳页的问题。

总之前端处理和上传本地文件应该差不多就是这些内容了,但是应该还有好多细节没有提及到读者可通过本文列的方向自行实践。如果有其它的上传方式还请告知


著作權归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。

我要回帖

更多关于 添么读 的文章

 

随机推荐