前端代码

<!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代码

<?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

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

  1. jQuery插件之ajaxFileUpload异步上传

    介绍 AjaxFileUpload.js 是一个异步上传文件的jQuery插件,原理是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 下载地址: http://files.cnblogs. ...

  2. JQUERY AJAX无刷新异步上传文件

    AJAX无刷新上传文件并显示 http://blog.csdn.net/gao3705512/article/details/9330637?utm_source=tuicool jQuery For ...

  3. jquery.form.js实现异步上传

    前台页面 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewpor ...

  4. jquery.form.js 实现异步上传

    前台: <form id="formSeacrh" action="/ResumeInfo/uploadFile" method="post&q ...

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

    首先我们需要做准备工作: jquery下载:http://files.cnblogs.com/tianguook/jquery1.8.rar jquery.form.js下载:http://files ...

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

    springMVC的MultipartFile与传统的ajax文件上传兼容性不好,采用如下的ajax方法,后台无法获取文件. $.ajax({ url: '/upload', type: 'POST' ...

  7. 【文件上传】jquery之ajaxfileupload异步上传插件

    来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用J ...

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

    网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: <form id=&quo ...

  9. jquery之ajaxfileupload异步上传插件

    点我下载工程代码由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/d ...

随机推荐

  1. Docker Compose 安装 on centos7

    本文演示如何在CentOS7上安装Docker Compose. 1 在线安装 1.1 下载安装包 $ curl -L https://github.com/docker/compose/releas ...

  2. [转载]Windows 2003 R2 SP2 VOL 企业版(简体中文)

    Windows 2003 R2 SP2 VOL 企业版(简体中文) 要是这个的话,分享个电驴的下载连接吧(可以复制后用快车和迅雷直接下)32位版CD1:SHA1值:d0dd2782e9387328eb ...

  3. spring4笔记----UrlResource访问网络资源读取xml内容

    package com.ij34.bean; import java.util.Iterator; import java.util.List; import org.dom4j.Document; ...

  4. EOS智能合约开发(一):EOS环境搭建和启动节点

    EOS和以太坊很像,EOS很明确的说明它就是一个区块链的操作系统,BM在博客中也是说过的. 可以这样比喻,EOS就相当于内置激励系统的Windows/Linux/MacOS,这是它的一个定位. 包括以 ...

  5. distribution 分发数据库 灾难恢复 备份恢复

    参考: http://www.sqlservercentral.com/articles/Replication/117265/ 前提:     准备一台电脑,主机名和以前的分发数据库一致.并且安装s ...

  6. AngularJS学习之旅—AngularJS 指令(三)

    1.AngularJS 指令 AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 通过内置的指令来为应用添加功能. AngularJS 允许你自定义指令.2.Angu ...

  7. c/c++ 网络编程与多线程 编译参数

    网络编程与多线程 编译参数 编译时要链接操作系统的pthread库 g++ -g socket01.cpp -std=c++11 -pthread 不加-pthread的话,出现下面的错误: term ...

  8. JAVA的下载与安装和环境变量配置等详细教程

    初学JAVA时,新手常常不知如何下载JAVA,也不知如何安装JAVA以及对JAVA配置环境变量.近期学弟学妹常请教我如何下载安装和配置JAVA,于是写下此博文以便更多新手快速入门,由于我本人是玩智能车 ...

  9. 4.11Python数据处理篇之Matplotlib系列(十一)---图例,网格,背景的设置

    目录 目录 前言 (一)图例legend 1.默认不带参数的图例 2.添加参数的图例 3.将图例移动到框外 (二)网格grid 1.说明 2.源代码: 3.输出效果 (三)背景axses 1.设置全局 ...

  10. 微服务---Eureka注册中心(服务治理)

    在上一篇的初识SpringCloud微服务中,我们简单讲解到服务的提供者与消费者,当服务多了之后,会存在依赖与管理之间混乱的问题,以及需要对外暴露自己的地址,为了解决此等问题,我们学习Eureka注册 ...