js实现图片上传-以及获取图片宽高、大小获属性

本文主要探讨前端开发中文件和图片的上传处理,包括以FormData、base64和二进制形式上传图片,以及文件大小和图片宽高的获取。前端通过监听文件输入事件,使用FormData构造上传数据,支持单个和多个文件上传,并根据需求选择不同的图片编码方式。同时,文章提到了前端如何限制上传文件的大小和图片尺寸,确保符合接口要求。
摘要由CSDN通过智能技术生成

前言:作为前端开发人员,避免不了上传一些文件和图片,那么什么格式需要前端后协商,同时考虑实施性,能否最有效和最合适取决于格式。自己总结了一下,如果错误欢迎指正!

文件图片上传

1、利用FormData图片/文件上传-----以文件的形式上传


//上传单个文件
upLoadFile(event) {let file = event.target.files;let _this = thislet formData = new FormData();
​        formData.append('file', file[0]);
    //如果是图片 formData.append('image', file[0]);
    //这里的image只是类似对象属性名称一样,看接口需要什么放什么,但是图片也是一个文件,以文件的形式上传//上传多个文件
upLoadFile(event) {let file = event.target.files;let _this = thislet formData = new FormData();for (let i = 0; i <= file.length - 1; i++) {
​          formData.append('files', file[i]);
    //如果是图片 formData.append('images', file[i]);}

在这里插入图片描述

如图所示,图片以文件的形式上传(binary)(其他参数我没有在代码中体现)

<input type="file" class="upload_inp" @change="fileupload($event)" />
	
	fileupload(event){
		let file = event.target.files[0];
		let formData = new FormData();
		formData.append("files", file);
		formData.append("Id", this.Id);
		formData.append("name", this.name);
		this.$axios
        .post(
          `/xxxxx/aaaaa/bbbbb`,
          formData,
            //{
            // headers: {
            //        "Content-Type": "multipart/form-data"
            //   	},
            //}
            //这里请求头加不加看自己情况,浏览器默认是有的,但是特殊情况也不是没有
        )
        .then(res => {
          this.getList();
        });
	}

这样id和name和文件一起传给后端了

2、图片上传--------以base64格式上传

 upLoadImg(e) {let _this = thislet reader = new FileReader();let file = e.target.files[0];if (file) {if (file.size > 102400) {//直接拿到文件的大小(图片也是文件)alert("请上传100KB以下的照片")} else {
​            reader.readAsDataURL(file);//解析文件以base64的形式
​            reader.onload = function (e) {
​              _this.thumbnail = reader.result //base64格式}}}},

3、图片上传---------以二进制的形式上传

upLoadImg(e) {
    let file = this.files[0];
        let reader = new FileReader();
        reader.readAsArrayBuffer(file);//按照字节读取文件并存储至二进制缓存区
        reader.onload = function (e) {
          let result = e.target.result;
           let blob = new Blob([result]);//存储二进制数据
          // let url = URL.createObjectURL(blob);//生成本地图片地址用于图片预览
        }
}

在这里插入图片描述

42、文件/图片的大小
 upLoadImg(e) {
                let file = e.target.files[0];//单个文件处理
                if (file) {
                  let size=file.size//字节单位
                  }
 }

在这里插入图片描述
在这里插入图片描述
文件的大小获取,主要是前端自定义限制上传图片或者文件的大小,做出提醒!

43、图片的宽高获取
// 图片地址
var img_url =13643608813441.jpg'
// 创建对象
var img = new Image()
// 改变图片的src
img.src = img_url
// 打印
alert('width:'+img.width+',height:'+img.height);

对于特殊要求,比如宽高必须是.2的幂次方,这样就可以拿到宽高做一个判断提醒限制!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过自定义 quill 的 toolbar 进行实现,具体步骤如下: 1. 安装 `vue-quill-editor` 和 `quill-image-resize-module` ``` npm install vue-quill-editor quill-image-resize-module --save ``` 2. 在 nuxt 项目中,创建一个插件文件 `vue-quill-editor.js`,在该文件中引入 `vue-quill-editor` 和 `quill-image-resize-module` ```javascript import Vue from 'vue' import Quill from 'quill' import VueQuillEditor from 'vue-quill-editor' import ImageResize from 'quill-image-resize-module' Quill.register('modules/imageResize', ImageResize) Vue.use(VueQuillEditor) ``` 3. 在 `nuxt.config.js` 中,将该插件引入 ```javascript plugins: [ { src: '~/plugins/vue-quill-editor.js', ssr: false } ] ``` 4. 在需要使用富文本编辑器的组件中,将 `modules` 属性设为 `{ imageResize: true }`,并自定义 `toolbar` ```vue <template> <div> <quill-editor v-model="content" :options="editorOption"></quill-editor> </div> </template> <script> export default { data() { return { content: '', editorOption: { modules: { imageResize: {}, toolbar: [ // 自定义 toolbar ['bold', 'italic', 'underline', 'strike'], ['blockquote', 'code-block'], [{ header: 1 }, { header: 2 }], [{ list: 'ordered' }, { list: 'bullet' }], [{ script: 'sub' }, { script: 'super' }], [{ indent: '-1' }, { indent: '+1' }], [{ direction: 'rtl' }], [{ size: ['small', false, 'large', 'huge'] }], [{ header: [1, 2, 3, 4, 5, 6, false] }], [{ color: [] }, { background: [] }], [{ font: [] }], [{ align: [] }], ['clean'], ['link', 'image', 'video'] ] } } } } } </script> ``` 5. 在 `quill-image-resize-module` 中,可以通过 `minSize` 和 `maxSize` 属性设置图片的最小和最大尺寸 ```javascript Quill.register('modules/imageResize', ImageResize({ modules: ['Resize', 'DisplaySize', 'Toolbar'], // 可以自定义使用的模块 handleStyles: { backgroundColor: 'black', border: 'none', color: 'white' }, minSize: { width: 50, height: 50 }, maxSize: { width: 800, height: 800 } })) ``` ### 回答2: Nuxt使用vue-quill-editor改变图片大小的方法如下: 1. 首先,在Nuxt项目中安装vue-quill-editor插件。可以通过npm或yarn来安装,例如运行以下命令:npm install vue-quill-editor 2. 在Nuxt项目的.vue文件中,引入vue-quill-editor插件。可以通过import语句导入插件:import VueQuillEditor from "vue-quill-editor" 3. 在Vue组件的data属性中,定义一个变量用于保存图片大小设置,例如:imgSize: "300px"。这里的"300px"表示图片的宽度为300像素。 4. 在Vue组件中,使用vue-quill-editor来创建富文本编辑器的实例。在vue-quill-editor组件中,可以通过配置项来设置图片大小。例如,可以使用formats属性设置图片的默认大小,代码如下: <VueQuillEditor ref="myQuillEditor" :formats="{ image: {width: this.imgSize} }" ></VueQuillEditor> 这里的image表示图片格式,width表示图片的宽度。可以将width的值设置为data属性中定义的imgSize变量。 5. 最后,在Vue组件的methods中定义一个方法,用于修改图片大小。可以通过修改imgSize的值来改变图片大小,代码如下: changeImgSize() { this.imgSize = "500px"; } 这里将imgSize的值设置为"500px",表示图片的宽度为500像素。 总之,使用Nuxt和vue-quill-editor插件可以方便地改变图片大小。通过设置format属性和修改data中的imgSize变量,可以达到改变图片大小的效果。 ### 回答3: 在Nuxt中使用vue-quill-editor插件来改变图片大小,可以通过自定义上传组件以及配置项来实现。 首先,在Nuxt项目中安装vue-quill-editor插件和相关依赖: ```bash npm install vue-quill-editor @quilljs/image-resize-module ``` 然后,在Nuxt中创建一个自定义的上传组件(Upload.vue): ```html <template> <input type="file" @change="uploadImage" /> </template> <script> export default { methods: { uploadImage(event) { const file = event.target.files[0]; const reader = new FileReader(); reader.onload = () => { // 将图片转换成base64格式,并放入editor中 const imgBase64 = reader.result; this.$emit('insertImage', imgBase64); }; reader.readAsDataURL(file); } } }; </script> <style scoped> input[type="file"] { display: none; } </style> ``` 接下来,在Nuxt中的页面(比如:index.vue)中使用vue-quill-editor和自定义的上传组件来实现图片大小调整: ```html <template> <div> <div class="toolbar"> <button @click="changeImageSize">改变图片大小</button> </div> <quill-editor v-model="content" ref="myQuillEditor"> <upload @insertImage="insertImage"></upload> </quill-editor> </div> </template> <script> import { quillEditor } from 'vue-quill-editor'; export default { components: { quillEditor, upload: () => import('~/components/Upload.vue') }, data() { return { content: '' }; }, methods: { insertImage(imgBase64) { const quill = this.$refs.myQuillEditor.quill; const range = quill.getSelection(); quill.insertEmbed(range.index, 'image', imgBase64); }, changeImageSize() { const quill = this.$refs.myQuillEditor.quill; const images = quill.container.querySelectorAll('img'); Array.from(images).forEach((image) => { // 修改图片大小的逻辑 // 可以通过修改image的width和height属性来改变图片大小 }); } } }; </script> <style scoped> .toolbar { margin-bottom: 10px; } </style> ``` 以上,我们在页面中添加了一个按钮来调用changeImageSize方法,该方法可以获取Quill编辑器中的图片元素,进而可以改变其大小。通过修改图片元素的width和height属性,可以实现改变图片大小的效果。 当然,具体的改变图片大小的逻辑可以根据实际需求来进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值