Html5实现单张、多张图片上传功能

HTML5提供了<input type="file">标签,支持图片上传,具体实现单张或多张图片上传需要借助一些JavaScript库。

实现单张图片上传

基础功能

  1. 在HTML页面中创建一个表单,包含一个<input type="file">标签,指定accept="image/*",这样能够限制上传的文件类型只能为图片:
<form>
  <input type="file" accept="image/*">
</form>
  1. 添加监听事件,在文件上传时获取上传的文件对象:
var inputElement = document.querySelector("input[type=file]");
inputElement.addEventListener("change", handleFiles, false);

function handleFiles(event) {
  var fileList = event.target.files;
  console.log(fileList[0]); // 上传的文件对象
}
  1. 发送上传请求:
var formData = new FormData();
formData.append('file', fileList[0]);

var xhr = new XMLHttpRequest();
xhr.open('POST', 'upload.php', true);
xhr.send(formData);
  1. 服务端处理上传请求,上传成功后返回上传文件的URL地址。

增加预览功能

实现增加预览功能,可以预览用户选择的图片。

<form>
  <input type="file" accept="image/*">
  <img id="preview" src="" style="max-width: 300px; max-height: 300px;">
</form>
function handleFiles(event) {
  var fileList = event.target.files;
  var image = document.getElementById('preview');
  image.src = URL.createObjectURL(fileList[0]);
}

增加图片大小限制

可以添加最大图片上传大小的限制,用户上传大文件时进行提示。

<form>
  <input type="file" accept="image/*" onchange="checkSize(event)">
  <img id="preview" src="" style="max-width: 300px; max-height: 300px;">
</form>
function checkSize(event) {
  var fileList = event.target.files;
  if(fileList[0].size > 1024*1024) {
    alert("图片大小不能超过1MB");
    event.target.value = '';
  }
}

实现多张图片上传

实现多张图片上传需要使用JavaScript插件,常用的有Dropzone、Fine Uploader、Bootstrap FileInput等。

使用Dropzone插件

  1. 引入Dropzone CSS和JavaScript文件:
<link href="https://cdn.jsdelivr.net/npm/dropzone@5.7.2/dist/dropzone.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/dropzone@5.7.2"></script>
  1. 创建Dropzone对象,绑定到指定的HTML元素上:
<form action="upload.php" class="dropzone"></form>
Dropzone.autoDiscover = false;
var dz = new Dropzone("form", {
  paramName: "file",
  uploadMultiple: true,
  acceptedFiles: "image/*",
  maxFilesize: 1, // MB
  maxFiles: 5, // 最多上传5个文件
  dictDefaultMessage: "将文件拖放到此处上传",
  dictFallbackMessage: "浏览器不支持拖放上传",
  dictInvalidFileType: "只能上传图片文件",
  dictFileTooBig: "文件大小不能超过1MB",
  dictMaxFilesExceeded: "最多上传5个文件"
});

示例: Dropzone Example

使用Fine Uploader插件

  1. 引入Fine Uploader CSS和JavaScript文件:
<link href="https://cdn.fineuploader.com/fine-uploader/5.17.3/fine-uploader-new.css" rel="stylesheet">
<script src="https://cdn.fineuploader.com/fine-uploader/5.17.3/jquery.fine-uploader.min.js"></script>
  1. 创建FineUploader对象,绑定到指定的HTML元素上:
<div id="fine-uploader">上传文件</div>
var uploader = new qq.FineUploader({
  element: document.getElementById('fine-uploader'),
  request: {
    endpoint: '/server/upload'
  },
  multiple: true,
  maxFiles: 5, // 最多上传5个文件
  validation: {
    allowedExtensions: ['jpeg', 'jpg', 'gif', 'png'],
    sizeLimit: 1024*1024, // 1MB
    stopOnFirstInvalidFile: false,
    itemLimit: 5 // 最多上传5个文件
  },
  messages: {
    typeError: "{file}文件类型不正确(只支持{extensions}文件)。",
    sizeError: "{file}文件太大,文件大小不能超过{sizeLimit}。",
    itemLimitError: "超出最大上传数量(最多上传{itemLimit}个文件)。"
  },
  text: {
    uploadButton: '上传文件'
  }
});

示例: FineUploader Example

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Html5实现单张、多张图片上传功能 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxNotification高度属性

    以下是关于 jQWidgets jqxNotification 组件中 height 属性的详细攻略。 jQWidgets jqxNotification height 属性 jQWidgets jqxNotification 的 height 属性用于指定通知组件的高度。 语法 // 获取 height值 var height = $(‘#notifica…

    jquery 2023年5月12日
    00
  • jQWidgets jqxButtonGroup 主题属性

    jQWidgets 的 jqxButtonGroup 组件提供了 rtl 属性,用于设置按钮组的文本方向。本文将详细介绍 rtl 属性的使用方法,包括概述、示例以及注意项。 rtl 属性概述 rtl 属性用于设置按钮组的文本方向。当 rtl 属性设置为 true 时,按钮组的文本方向为从右到左;否则,按钮组的文本方向为从左到右。 rtl 属性示例 下面是两个…

    jquery 2023年5月11日
    00
  • 深入探寻javascript定时器

    深入探寻JavaScript定时器 JavaScript中的定时器(Timer)是指让某段函数延迟一定的时间才执行或者按照一定的时间间隔周期性地执行。常用的定时器函数有setTimeout()和setInterval()。但是在使用定时器的时候,需要考虑到回调函数的执行时间、浏览器对定时器的最小时间间隔限制等等问题。下面将结合示例进行详细讲解。 setTim…

    jquery 2023年5月27日
    00
  • jQWidgets jqxListBox removeAt()方法

    jQWidgets jqxListBox removeAt()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。ListBox是其中之一。本文将详细介绍jqxListBox的removeAt()方法,包括定义、语法和示例。 removeAt()方法的定义 jqxListBox的removeAt()方法用于从列表框中删除…

    jquery 2023年5月10日
    00
  • 如何使用jQuery禁用表单中的Enter按钮提交

    下面是使用jQuery禁用表单中的Enter按钮提交的完整攻略: 1. 获取表单 首先,我们需要获取需要禁用Enter键提交的表单。可以使用jQuery选择器来获取表单元素: var form = $("form"); 这将获取页面中的第一个表单元素。如果有多个表单,可以用索引或特定属性来获取。 2. 禁用Enter键提交 接下来,在获取…

    jquery 2023年5月12日
    00
  • jQWidgets jqxDropDownList dropDownVerticalAlignment属性

    jQWidgets jqxDropDownList dropDownVerticalAlignment属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDropDownList是Widgets组件的组件。本文将详细介绍jqxDropDownList的dropDownVerticalAlignment属性,包括用…

    jquery 2023年5月10日
    00
  • jQWidgets jqxScheduler editDialogClose事件

    下面我将为您详细讲解“jQWidgets jqxScheduler editDialogClose事件”的完整攻略: 一、什么是jQWidgets jqxScheduler editDialogClose事件? jQWidgets jqxScheduler是一个用于创建可定制的日程安排和任务计划的JavaScript组件。它具有强大的功能,可以满足各种需求。…

    jquery 2023年5月11日
    00
  • JS简单实现浮动窗口效果示例

    下面我会给您详细讲解JS简单实现浮动窗口效果示例的攻略。 方案选择 实现浮动窗口效果可以使用CSS中的position属性,但更灵活的做法是使用JS来实现。因为使用JS可以更加细致地控制浮动窗口的行为,比如当鼠标移动时浮动窗口需要跟随移动。在实现中,我们需要用到JS的DOM操作和事件监听等功能。 实现步骤 HTML结构 首先,我们需要设置好HTML的结构。一…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部