ThinkPHP+JQuery实现文件的异步上传

前端代码

文件路径:application/index/view/index/index.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>ThinkPHP+JQuery实现文件的异步上传</title>
</head>
<body>

<form id="ajax-upload-demo" enctype="multipart/form-data">
    <label>选择文件:</label>
    <input type="file" name="image"><br><br>
    <a href="javascript:uploadFile();">上传</a>
</form>
<br><p id="tips"></p>

<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script>

    var isUploading = false;

    // 上传文件
    function uploadFile(){
        var form = document.getElementById('ajax-upload-demo');
        if(isUploading) {
            alert('文件正在上传...');
            return false;
        }
        $.ajax({
            url: '/index/index/uploadApi',
            type: 'POST',
            cache: false,
            data: new FormData(form),
            processData: false,
            contentType: false,
            dataType: 'json',
            beforeSend: function () {
                isUploading = true;
            },
            success: function (json) {
                var arr = JSON.parse(json);
                if(arr.errcode == 10000){
                    // 上传成功
                    alert('上传成功');
                    var url = arr.data.url;
                    var tips = "<a href='" + url + "' target='_blank'>点击查看</a>";
                    $("#tips").empty().append(tips);

                }else{
                    // 上传失败
                    alert('上传失败');
                }
                isUploading = false;
            }
        });
    }
</script>
</body>
</html>

效果图:

PHP代码

文件路径:application/index/controller/Index.php

<?php
namespace app\index\controller;

use think\Controller;

class Index extends Controller
{
    // 上传表单页面
    public function index()
    {
        return $this->fetch();
    }

    // 上传文件接口
    public function uploadApi(){
        // 获取文件
        $file = request()->file('image');
        if($file){
            // 校验数组
            $validateArr = [ 'ext' => 'jpg,jpeg,gif,png,bmp' ];
            // 文件的本地存储路径
            $path = ROOT_PATH . 'public' . DS . 'upload';
            // 校验并移动
            $info = $file->validate($validateArr)->move($path);
            // 检查移动结果
            if($info){
                // 上传成功

                // 输出 jpg
                #echo $info->getExtension();

                // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
                #echo $info->getSaveName();

                // 输出 42a79759f284b767dfcb2a0197904287.jpg
                #echo $info->getFilename();

                // 文件的原文件名
                $sourceInfo = $info->getInfo();
                $sourceName = $sourceInfo['name'];

                // 拼装url
                $url = '/upload/'.$info->getSaveName();
                $url = str_replace('\\', '/', $url); // Windows下替换路径分隔符

                // other some operations ...

                // 返回json,告知客户端上传结果
                $json = json_encode([
                    'errcode'   => '10000',
                    'errmsg'    => 'Upload success',
                    'data'      => [ 'url' => $url ]
                ]);
            }else{
                // 上传失败,返回json,告知客户端
                $json = json_encode([
                    'errcode'   => '20002',
                    'errmsg'    => 'Upload failed',
                ]);
            }
        }else{
            // 未上传文件
            $json = json_encode([
                'errcode'   => '20001',
                'errmsg'    => 'File not uploaded',
            ]);
        }
        return $json;
    }
}

上传测试

1. 上传一张图片

2. 上传成功

3. 点击查看

4. 查看图片

5. 查看上传目录

可能出现的错误

1. PHP的上传限制

解决方法
打开PHP的配置文件php.ini

  1. 查找max_execution_time,修改其值为60或更大
  2. 查找post_max_zise,修改其值为128M或更大
  3. 查找upload_max_filesize,修改其值为128M或更大

原因

  1. max_execution_time指的是一次请求最长的执行秒数。如果上传文件过大,则可能服务端还没有接收完文件就结束程序了;
  2. post_max_size指的是POST数据所允许的最大大小;
  3. upload_max_filesize指的是上传文件的最大大小。

本文链接:https://www.cnblogs.com/connect/p/thinkphp-ajax-upload.html

原文地址:https://www.cnblogs.com/connect/p/thinkphp-ajax-upload.html

时间: 2024-08-01 10:59:04

ThinkPHP+JQuery实现文件的异步上传的相关文章

使用 jQuery FileUpload 插件实现异步上传

首先,先做两个提前准备工作  1.下载插件 2.向项目导入需要的css样式和js样式 下面,开始实现 使用 jQuery FileUpload 插件实现异步上传 <!- jsp 页面  以添加一个学生为例子 -!> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html P

jQuery插件之ajaxFileUpload异步上传

介绍 AjaxFileUpload.js 是一个异步上传文件的jQuery插件,原理是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 下载地址: http://files.cnblogs.com/files/kissdodog/ajaxfileupload_JS_File.rar http://zhangzhaoaaa.iteye.com/blog/2123021 属性 语法:$.ajaxFileUpload([options]) url 上传处理程序地址. fileElementI

JQUERY AJAX无刷新异步上传文件

AJAX无刷新上传文件并显示 http://blog.csdn.net/gao3705512/article/details/9330637?utm_source=tuicool jQuery Form Plugin 官网地址:http://malsup.com/jquery/form/#tab7 基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用 http://www.cnblogs.com/wuhuacong/p/3343967.html

jquery.form.js 实现异步上传

前台: <form id="formSeacrh" action="/ResumeInfo/uploadFile" method="post" enctype="multipart/form-data"> <div class="form-horizontal"> <div class="form-group" style="height:100p

jquery.form.js实现异步上传

前台页面 1 @{ 2 Layout = null; 3 } 4 <!DOCTYPE html> 5 <html> 6 <head> 7 <meta name="viewport" content="width=device-width" /> 8 <script src="~/Scripts/jquery-1.7.2.min.js"></script> 9 <scri

springMVC的多文件的异步上传实现

springMVC的MultipartFile与传统的ajax文件上传兼容性不好,采用如下的ajax方法,后台无法获取文件. $.ajax({ url: '/upload', type: 'POST', cache: false, data: new FormData($('#uploadForm')[0]), processData: false, contentType: false }).done(function(res) { }).fail(function(res) {}); 服务器

asp.net使用jquery.form实现图片异步上传

首先我们需要做准备工作: jquery下载:http://files.cnblogs.com/tianguook/jquery1.8.rar jquery.form.js下载:http://files.cnblogs.com/tianguook/jquery.form.js 页面JqueryFormTest.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="JqueryForm

Jquery FormData文件异步上传 快速指南

网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: [html] view plain copy print? <form id="fileUploadForm"> <input type="file" name="file" class="imageUpload"/> <span 

jquery之ajaxfileupload异步上传插件

来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/download_project_version.php?version_id=6服务器端采用struts2来处理文件上传.所需环境:jquery.jsajaxfileupload.j