原生JavaScript+PHP多图上传实现

这篇具有很好参考价值的文章主要介绍了原生JavaScript+PHP多图上传实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

很多场景下需要选择多张图片上传,或者是批量上传以提高效率,多图上传的需求自然就比较多了,本文使用最简单的XMLHttpRequest异步上传图片。

界面

原生JavaScript+PHP多图上传实现,PHP,javassript,后端,javascript,php

上传示例

原生JavaScript+PHP多图上传实现,PHP,javassript,后端,javascript,php

代码

index.html

<!DOCTYPE html>
<html>
	<head>
		<title>多图上传</title>
		<meta charset="utf-8">
		<style>
		    #fileInput{
		        width: 500px;
		        height: 45px;
		        margin: 50px auto 0;
		        background: #eee;
		        display: block;
		        padding: 20px 20px;
		        border-radius: 20px;
		    }
		    #previewContainer{
		        width: 500px;
		        margin: 10px auto;
		        background: #eee;
		        padding: 20px 20px;
		        display: none;
		    }
			.preview-image {
              max-width: 200px;
              max-height: 200px;
              margin-bottom: 10px;
            }
        </style>
	</head>
	<body>
	    
	    <!--选择文件-->
		<input type="file" id="fileInput" accept="image/*" multiple>
		<div id="previewContainer"></div>
		
		<script>
			const fileInput = document.getElementById('fileInput');
			const previewContainer = document.getElementById('previewContainer');
			
            // 监听选择文件
			fileInput.addEventListener('change', handleFileSelect);
			
            function handleFileSelect(event) {
                const files = event.target.files;
            
                for (let i = 0; i < files.length; i++) {
                    const file = files[i];
                    const reader = new FileReader();
            
                    reader.onload = function(event) {
                        const image = document.createElement('img');
                        image.className = 'preview-image';
                        image.src = event.target.result;
                        previewContainer.appendChild(image);
                        
                        // 将文件上传至服务器
                        uploadImage(file);
                    }
                    
                    reader.readAsDataURL(file);
                }
            }
			
            // 将文件上传至服务器
            function uploadImage(file) {
                const xhr = new XMLHttpRequest();
                const formData = new FormData();
                
                // 将文件添加到formData对象
                formData.append('image', file);
                
                // 设置XHR请求的处理函数
                xhr.onreadystatechange = function() {
                    
                    if (xhr.readyState === XMLHttpRequest.DONE) {
                        if (xhr.status === 200) {
                            
                            console.log('上传成功');
                            
                            // 显示图片预览区域
                            document.querySelector('#previewContainer').setAttribute('style', 'display:block');
                            
                            // 打印JSON
                            console.log(JSON.parse(xhr.response))
                            
                        } else {
                            
                            console.log('上传失败');
                        }
                    }
                }
            
                // 发送POST请求到服务器
                xhr.open('POST', 'upload.php', true);
                xhr.send(formData);
                
            }
		</script>
	</body>
</html>

upload.php
(请建立一个upload文件夹以存放上传的文件)

<?php

    // 编码
    header("Content-type:application/json");

    // 检查是否有文件上传
    if (isset($_FILES['image'])) {
    
        // 获取上传的文件信息
        $file = $_FILES['image'];
        
        // 获取文件名
        $fileName = $file['name'];
        
        // 获取文件的临时路径
        $tmpFilePath = $file['tmp_name'];
        
        // 指定保存目录
        $uploadDir = 'upload/';
        
        // 验证是否为图片文件
        if ((($_FILES["image"]["type"] == "image/gif")
        || ($_FILES["image"]["type"] == "image/jpeg")
        || ($_FILES["image"]["type"] == "image/jpg")
        || ($_FILES["image"]["type"] == "image/pjpeg")
        || ($_FILES["image"]["type"] == "image/x-png")
        || ($_FILES["image"]["type"] == "image/png"))
        && ($_FILES["image"]["size"] < 10485760)){
            
            // 生成唯一的文件名
            $uniqueFileName = uniqid() . '_' . $fileName;
            
            // 拼接保存路径
            $uploadPath = $uploadDir . $uniqueFileName;
            
            // 获取HTTP协议
            function get_http_type(){
                $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
                return $http_type;
            }
            
            // 将临时文件移动到目标路径
            if (move_uploaded_file($tmpFilePath, $uploadPath)) {
                
                    // 上传成功
                    // 可以在此处进行进一步处理,比如生成缩略图、添加水印等
                    $result = array(
                        'code' => 200,
                        'msg' => '上传成功',
                        'url' => get_http_type().dirname($_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']).'/'.$uploadPath
                    );
            } else {
                    
                    // 上传失败
                    $result = array(
                        'code' => 202,
                        'msg' => '文件上传失败'
                    );
            }
        }else{
            
            // 不合规的文件
            $result = array(
                'code' => 202,
                'msg' => '不合规的文件'
            );
        }
        
    } else {
        
        // 没有文件上传
        $result = array(
            'code' => 202,
            'msg' => '没有选择要上传的文件'
        );
    }
    
    // JSON
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
?>

作者

TANKING文章来源地址https://www.toymoban.com/news/detail-702074.html

到了这里,关于原生JavaScript+PHP多图上传实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • layui选择多张图片上传多图上传到服务器保存

    多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解。对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的upload.render方法已经帮我们封装好了,我们只管调用即可,也就是说你选中了几张

    2024年02月16日
    浏览(29)
  • uniapp、uview——图片上传(单图上传、多图上传、多组照片上传、图片回显)

    uView组件的上传功能,单图上传、多图上传等。 官方文档地址: https://www.uviewui.com/components/upload.html (一)单图上传 1.效果演示: 只能上传一张,选完之后,上传的按钮消失,当然,如果图片不合适,删掉再换一张,但就是只能上传一张。 2.代码: (二)多图上传 1.效果演

    2024年02月07日
    浏览(27)
  • 【Java实现文件上传】java后端+vue前端实现文件上传全过程详解(附源码)

    【 写在前面 】其实这篇文章我早就想写了,只是一直被需求开发耽搁,这不晚上刚好下班后有点时间,记录一下。需求是excel表格的上传,这个是很多业务系统不可或缺的功能点,再此也希望您能够读完我这篇文章对文件上传不再困惑。(文件下载见另外一篇) 涉及知识点

    2024年02月06日
    浏览(37)
  • 前端 + 后端 实现分片上传(断点续传/极速秒传)

    先记录下,后面有时间再去实现 (已实现,可参考 SpringBoot+vue文件上传下载预览大文件分片上传文件上传进度 SpringBoot+vue 大文件分片下载) 可参考链接:vue上传大文件/视频前后端(java)代码 前端slice分片上传,后端用表记录分片索引和分片大小和分片总数,当接受完最后

    2023年04月17日
    浏览(33)
  • 原生JavaScript实现video视频控制栏

    最终预览效果:

    2024年02月03日
    浏览(25)
  • 【JavaScript】原生js实现省市区联动效果

    😉博主:初映CY的前说(前端领域) ,📒本文核心:用原生js实现省市区联动 【前言】今日在复习省市县三级联动的时候,有点忘了原生的js应该怎么样处理省市县的联动,特此写下来再次复习下 1.获取相对应的DOM对象 2.写省市县接口获取到接口信息 3.写下change事件,有变化时调

    2023年04月24日
    浏览(34)
  • html/javascript实现简单的上传

    一、 上传用到的按钮类型是type = file 二、 为了美化上传按钮,我们通常会自定义按钮,将默认的上传隐藏掉。 fileInputs.click() 触发上传按钮点击 三、 new FileReader() 读取文件内容方法: readAsText() 读取文本文件,(可以使用Txt打开的文件) readAsBinaryString(): 读取任意类型的文件

    2023年04月17日
    浏览(22)
  • 微信原生实现一个简易的图片上传功能

    wx.showActionSheet():显示操作菜单,选择是从相册选择还是相机拍摄照片 wx.chooseImage():从本地相册选择图片或使用相机拍照。 wx.uploadFile():将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求,其中 content-type 为 multipart/form-data。 wx.previewMedia(): 预览图片和视频。 upload.wx

    2024年02月16日
    浏览(26)
  • 用JavaScript实现文件的上传与下载

    一、文件上传 1、普通文件上传 JavaScript 可以使用表单提交来实现文件上传。首先,在 HTML 中创建一个文件输入框:  然后,在 JavaScript 中获取文件输入框的引用,并在其上设置事件监听器,如下所示:   在事件监听器中,可以使用 fileInput.files[0] 属性获取选择的文件,然后

    2024年02月06日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包