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日

相关文章

  • Ajax技术组成与核心原理分析

    Ajax技术组成与核心原理分析 Ajax是Asynchronous JavaScript and XML的简称,指的是通过JavaScript异步获取数据并更新页面内容的一种技术。下面我们将详细介绍Ajax技术的组成和核心原理分析。 组件 Ajax由以下几个组件组成: HTML、CSS和JavaScript HTML用于页面的结构,CSS用于页面的样式,Ja…

    jquery 2023年5月27日
    00
  • jQuery UI Slider option()方法

    jQuery UI Slider option()方法攻略 jQuery UI Slider是一个强大的JavaScript库,它提供了许多选项和功能,以便创建自定义的滑块。其中,option()方法用于设置或获取滑块的选项。以下是详细攻略,含两个示例,演示如何使用option()方法: 步骤1:引入库 在使用之前,需要先在中引入jQuery库和jQuery…

    jquery 2023年5月9日
    00
  • jQuery实现简单的tab标签页效果

    针对“jQuery实现简单的tab标签页效果”的攻略,我提供如下内容。 前置条件 在开始这个任务之前,你必须先实现以下内容: 一个HTML页面,其中包含多个Tab标签页相关的元素。 Jquery核心库文件,注意不要引入错误的版本。 实现步骤 1. 给Tab标签页加上正确的HTML结构 如下所示,一个Tab标签页的HTML结构应该类似这样: <div i…

    jquery 2023年5月28日
    00
  • jQWidgets jqxPanel sizeMode属性

    以下是关于 jQWidgets jqxPanel 组件中 sizeMode 属性的详细攻略。 jQWidgets jqxPanel sizeMode 属性 jQWidgets jqxPanel 组件的 sizeMode 属性用于设置面板的大小模式。 语法 $(‘#panel’).jqxPanel({ sizeMode: ‘fixed’ }); 示例 以下两个…

    jquery 2023年5月12日
    00
  • jQWidgets jqxTree getCheckedItems()方法

    以下是关于 jQWidgets jqxTree 组件中 getCheckedItems() 方法的详细攻略。 jQWidgets jqxTree getCheckedItems() 方法 getCheckedItems() 方法用于获取 jQWidgets jqxTree 组件中被选中节点。该方法将返回一个数组,其中包含所有被选中的节点元素或节点数据。 语法…

    jquery 2023年5月11日
    00
  • jQWidgets jqxKnob dragStartAngle 属性

    jQWidgets jqxKnob dragStartAngle 属性攻略 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可于创建现代化 Web 应用程序。 jqxKnob旋钮,用于可视化调整数值。攻略将详细介绍 jqxKnob 的 dragStartAngle 属性,该属性用于设置旋钮的拖动起始角度。 dr…

    jquery 2023年5月10日
    00
  • jQWidgets jqxLayout minGroupWidth属性

    jQWidgets jqxLayout minGroupWidth属性攻略 简介 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可于创建代化应程序。jqxLayout 布局组件用于灵活的布局,可用于构建复杂的用户界面。本攻略将详细介绍 jqxLayout 的 minGroupWidth 属性,包括 minGr…

    jquery 2023年5月10日
    00
  • JS实现简单的天数计算器完整实例

    我来为你详细讲解一下JS实现简单的天数计算器完整实例的攻略。 1. 确定需求 在开始编写代码之前,我们需要确定题目的需求,以便于更好的完成代码的实现。根据题目给出的要求,我们需要实现一个简单的天数计算器,输入两个日期,计算这两个日期之间相隔的天数。因此,我们需要解决两个问题: 如何实现日期的输入,并将输入内容转换成JavaScript中的日期对象 如何计算两…

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