我可以将图像表单数据传递给 PHP 函数进行上传吗?

2023-12-06

我正在尝试使用 jquery 和 PHP 上传图像,如下所示:

HTML

<form id="form-photo" enctype="multipart/form-data"><
  <span class="btn btn-small fileinput-button">
    <span>Add Photo</span>
    <input type="file" name="photo-img" id="photo-img">
  </span>
</form>

当前的 jquery 框架如下所示:

$('#photo-img').change(function(){
    var file = this.files[0];

    //console.log(file);
    name = file.name;
    size = file.size;
    type = file.type;

    // I'll do some validation here before proceeding

    var formData = new FormData($('#form-photo'));

    console.log(formData);

   // How do I pass the image form data to a PHP function via jquery?

});

我可以通过 jquery post 将 formData 传递给 PHP 函数吗?


已测试并正在处理Goolge Chrome, Opera, Firefox, Safari.
doesn't work with IE8 or lower

JavaScript

创建一个FormData对象并附加file带索引photo-img and POST在以下的帮助下将其发送到您的服务器XMLHttpRequest

$(function() {
  $('#photo-img').change(function(){
    var file  = this.files[0];

    // do your validation here

    var formData  = new FormData();
    formData.append( 'photo-img', file ); // append the file to form data

    var xhr = false;
    if ( typeof XMLHttpRequest !== 'undefined' ) {
      xhr = new XMLHttpRequest();
    }
    else {
      var versions  = [ "MSXML2.XmlHttp.5.0", "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.2.0", "Microsoft.XmlHttp" ];
      for( var i = 0, len = versions.length; i < len; i++ ) {
        try {
          xhr = new ActiveXObject( versions[i] );
          break;
        }
        catch(e) {}
      }
    }
    if ( xhr ) {
      // replace test.php with your own upload script url
      xhr.open( "POST", "test.php", true );
      xhr.onreadystatechange  = function() {
        if ( this.readyState === 4 && this.status == 200 ) {
          var response  = this.response || this.responseText;

          /** Do Something with the reponse **/
          response  = $.parseJSON( response );
          if ( response && response.message ) {
            window.alert( response.message );
          }

        }
      }
      // now send the formData to server
      xhr.send( formData );
    }
  });
});

PHP

服务器端更好的图像上传处理并返回JSON对象作为响应

<?php
  if ( isset( $_FILES["photo-img"] ) ) {
    $error  = false;
    $image  = $_FILES["photo-img"];
    $code   = (int)$image["error"];
    $valid  = array( IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF );
    $folder = dirname( __FILE__ )."/upload/"; // path to folder to where you want to move uploaded file
    $target = $folder.$image["name"];

    if ( !file_exists( $folder ) ) {
      @mkdir( $folder, 0755, true ) ;
    }

    if ( $code !== UPLOAD_ERR_OK ) {
      switch( $code ) {
        case UPLOAD_ERR_INI_SIZE:
          $error  = 'Error '.$code.': The uploaded file exceeds the <a href="http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize" target="_blank" rel="nofollow"><span class="function-string">upload_max_filesize</span></a> directive in php.ini';
        break;
        case UPLOAD_ERR_FORM_SIZE:
          $error  = 'Error '.$code.': The uploaded file exceeds the <span class="const-string">MAX_FILE_SIZE</span> directive that was specified in the HTML form';
        break;
        case UPLOAD_ERR_PARTIAL:
          $error  = 'Error '.$code.': The uploaded file was only partially uploaded';
        break;
        case UPLOAD_ERR_NO_FILE:
          $error  = 'Error '.$code.': No file was uploaded';
        break;
        case UPLOAD_ERR_NO_TMP_DIR:
          $error  = 'Error '.$code.': Missing a temporary folder';
        break;
        case UPLOAD_ERR_CANT_WRITE:
          $error  = 'Error '.$code.': Failed to write file to disk';
        break;
        case UPLOAD_ERR_EXTENSION:
          $error  = 'Error '.$code.': A PHP extension stopped the file upload';
        break;
        default:
          $error  = 'Error '.$code.': Unknown upload error'; 
        break; 
      }
    }
    else {
      $iminfo = @getimagesize( $image["tmp_name"] );
      if ( $iminfo && is_array( $iminfo ) ) {
        if ( isset( $iminfo[2] ) && in_array( $iminfo[2], $valid ) && is_readable( $image["tmp_name"] ) ) {
          if ( !move_uploaded_file( $image["tmp_name"], $target ) ) {
            $error  = "Error while moving uploaded file";
          }
        }
        else {
          $error  = "Invalid format or image is not readable";
        }
      }
      else {
        $error  = "Only image files are allowed (jpg, gif, png)";
      }
    }
    if ( empty( $error ) ) {
      echo json_encode( array( "error" => 0, "message" => "Upload success!" ) );
    }
    else {
      echo json_encode( array( "error" => 1, "message" => $error ) );
    }
    exit();
  }
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以将图像表单数据传递给 PHP 函数进行上传吗? 的相关文章

  • 如何从文件中获取整个函数

    好的 我现在正在逐行阅读一个文件 我知道文件中的每个函数名称 因为它是在 XML 文档中的其他位置定义的 应该是这样的 function function name 其中 function name 是函数的名称 我从 XML 文档中获取所
  • 将我的 Laravel 连接到外部数据库

    如何将 Laravel 连接到外部数据库 示例 我的本地计算机上有一个 Laravel 它在 xampp 上运行 我希望它连接到云服务器数据库 打开 env文件并编辑它 只需设置正确的外部数据库凭据 DB CONNECTION mysql
  • Django Ajax ModelForm 向 request.POST 提交一个空表单

    对于 django ajax 和 jquery 我是个新手 所以如果我的问题显得微不足道 我提前道歉 我已经在这个问题上摸不着头脑有一段时间了 但我正在尝试使用 ajax 和 jquery 通过 jQuery UI 提供的模式对话框窗口提交
  • Monolog:通过邮件发送错误日志会导致每个发送的错误都会收到一封额外的邮件

    对于通过邮件发送的每个错误日志 我们都会收到另一封额外的电子邮件 其中包含 2 行 smtp 调试日志消息 新创建的 symfony 演示 symfony new demo 配置独白以通过邮件发送错误消息 如docs https symfo
  • PHP cURL 看不到 /etc/hosts 文件

    我在让 PHP cURL 库识别我在我的文件中创建的别名时遇到了麻烦 etc hosts file 这就是我的 etc hosts现在归档 192 168 0 20 www example dev 在另一端 192 168 0 20 Apa
  • POSTed 数组保留其值

    今天 我注意到我的一个 WordPress 安装的行为方式非常奇怪 每当我从仪表板更新帖子时 它的一些额外输入都会保留它们已有的值 所有这些都是多维数组 例如 post php post 123 action 编辑
  • 如何显示接下来的三个图像单击加载更多按钮

    我需要一个加载更多按钮来显示图像 页面加载时 我显示 3 个图像 单击 加载更多 按钮后 接下来的 3 个图像将显示在屏幕上 我尝试了下面的代码 但它不起作用 你能帮我解决这个问题吗 function item slice 0 2 show
  • 一次用 \r\n & \n & \r 分解字符串? [复制]

    这个问题在这里已经有答案了 我想按行分割字符串 但我希望它基于所有主要使用的换行符 n r n r 并返回一个包含每一行的数组 您可以使用正则表达式和preg split http php net preg split反而 lines pr
  • jquery 中的函数返回未定义[重复]

    这个问题在这里已经有答案了 我在 jquery 中调用的函数返回未定义 我检查了该函数 当我对其进行调试时 它返回正确的数据 function addToPlaylist component type add to pl value pl
  • JQuery 菜单图标 RTL

    我正在尝试在阿拉伯语 RTL 页面中使用 jQuery 菜单 我可以将其设为 RTL 但图标应该是ui icon carat 1 w not ui icon carat 1 e 我创建jsfiddle在这里 http jsfiddle ne
  • Yii2 组件将数据传递给 __construct

    我有一个库 我想将其用作组件 在配置文件中我这样设置 components gt superLib gt class gt SuperLib construct gt first second Maybe Yii 2 have proper
  • Laravel 5 命名约定

    我对 Laravel 约定有点困惑 因为我是这个框架的新手 我正在关注 Jeffrey Way 他使用的 Laracasts 视频Plural对于控制器名称 E g 页面控制器 卡片控制器 帖子控制器 但如果我参考官方文档Laravel g
  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • Laravel 4.2 Composer 安装错误:“无法扫描类”

    我想通过 Composer 在新的 Laravel 4 2 安装上安装一些软件包 但是 我遇到了例外 这是我的作曲家文件 name laravel laravel description The Laravel Framework keyw
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL
  • 触发 jQuery UI 滑块事件

    如何触发更改事件jQuery UI 滑块 http docs jquery com UI Slider 我以为会是 slider trigger slidechange 但这没有任何作用 完整的示例脚本如下
  • jQuery Mobile + Admob:轮换?

    我使用 jQuery Mobile 框架创建了一个移动应用程序 所有页面都在index php中加载 使用 div 在每个页面的页脚中 我添加了Admob代码 div div div
  • 将引导程序弹出框保留在视口内

    我正在尝试使用带有按钮的侧边栏创建一个菜单 每个按钮都有一个指定的包含相关数据的弹出窗口 不幸的是 其中一个弹出窗口可能包含任意数量的行 并且在某些情况下它可能部分位于视口之外 See http jsfiddle net bfd9f 1 h

随机推荐

  • 启用/安装 GD 扩展? --没有-gd

    当我的 phpinfo 在 配置命令 中输出时 如何启用 或者可能我需要安装 GD 没有 gd 我的 phpinfo 输出 Core 中也没有列出 gd AWS 上的 PHP 版本 5 2 4 如果您使用的是基于 Debian 的服务器 例
  • winforms 数据绑定仅适用于开发机器

    我的目标是框架 4 0 这在开发计算机上运行良好 我可以在启动时看到表单 其中文本框显示绑定消息 但是 当我在任何其他计算机上部署可执行文件时 它不会声称 无法绑定到数据源上的属性或列注释 非常奇怪的是 如果我针对 3 5 框架进行编译 它
  • scanf 不读取输入

    我阅读了更多有关 scanf 的帖子 发现一些答案机器人没有帮助我 while comanda int tmp if scanf d tmp 0 getchar else comanda tmp fprintf stdout d coman
  • 中断处理程序可以被抢占吗?

    我知道Linux有嵌套中断 其中一个中断可以 抢占 另一个中断 但是其他任务又如何呢 我只是想了解linux如何处理中断 它们可以被其他用户任务 内核任务抢占吗 Reading 为什么在中断上下文中执行的内核代码 线程无法休眠 链接到罗伯特
  • 将图像从一个工作簿复制到另一工作簿

    我在合并单元格范围 S1 V8 的sheet1 中有一张图像 我不知道这张图片的名称 因为每次从模板创建新的 Excel 文件时 我们都会在该区域粘贴不同的图片 我想将此工作簿或另一个工作簿中此范围内的图片复制到单元格 A6 中名为 数据库
  • PHP:在 6 行后结束并开始新的

    我想做一个表 然后每6行应该有一个tr 然后行在td里面 所以例子 tr td td 1 td td 2 td td 3 td td 4 td td 5 td td 6 tr tr start new tr after 6 rows rep
  • Powershell - 我的倒计时器出了什么问题

    我有一个计数器脚本需要两个参数 1 计数器启动前等待的秒数 2 计数器持续时间 以秒为单位 例如 如果我输入 3 10 我希望 3 秒后计时器将从 10 倒计时到 0 并每秒将其写入输出 这是我的脚本 timeBeforeStart arg
  • iOS:CAShapeLayer 路径转换

    我用过CAShape Layer在对路径进行基本变换之前 从较小的圆圈到较大的圆圈 足够好了 但后来我尝试将三角形变成圆形 它有效 但转变很奇怪 换句话说 从一种形状到另一种形状 在形成最终形状之前 它会 翻转 扭曲 对于相同的形状 没有问
  • ASP.NET 捕获并替换 Global.asax 中的输出

    我需要替换从我网站上每个页面发送的一些数据 我认为可以使用 Global asax 来完成 这是我迄今为止尝试过的 void Application PreSendRequestContent object sender EventArgs
  • Azure 成本导出应用什么业务逻辑?

    我想要获取 Azure 中最新的实际成本 似乎有 4 种方法可以实现不同的结果 将成本导出到存储帐户 成本管理API 计费接口 消费API 第 1 种效果很好 但我需要一个 API 而不是文件转储 第 2 种似乎是为了通过高速维度查询为成本
  • 这里 API 偏移地图中心

    我正在使用 Here Android SDK API 我通过以下方式设置位置指示器 positionManager start PositioningManager LocationMethod GPS NETWORK map getPos
  • MongoDB / Express - 如何在通过 connect() 连接后切换数据库

    我正在使用 Express 连接到我的 mongoDB mongodb MongoClient connect mongourl function err database How would one switch to another d
  • HttpClient 异步方法会在新线程中运行吗

    我想知道是否 NetHttpClient async方法在新线程或主线程中运行 例如 在我的控制台应用程序中 我调用async使用以下方法下载 URL 内容HttpClient GetStringAsync method 此方法 GetSt
  • SQL:从 2 个表创建完整记录

    我有一个数据库结构 为了理解问题而简化为最大 Table entry id integer primary key Table fields name varchar primary key and others Table entry f
  • Apache 重写没有 mod_rewrite?

    在没有启用或配置 mod rewrite 的情况下 Apache 如何重写 URL 我正在从我的开发服务器重新设计网站 我在网站部分使用目录结构 但我正在考虑切换到 URL 重写并将相关文件放在网站的根目录中 例如 about 页面有一个名
  • git 从 Linux 克隆到 TFS git 存储库

    我一直在尝试解决托管在本地 TFS2017 上的 Git 存储库的问题 无法从不在域中的 Linux 计算机上执行 git clone 命令 继续获取 致命 身份验证失败 我使用的用户是Linux机器上的本地用户 与域用户同名 密码相同 用
  • Android Volley POST 参数

    我需要调用一个需要字符串数组作为 POST 参数的 api 例如 API 定义 POST api names 预期的 POST 参数是一个名称数组和一些其他属性 如下所示 names John Bill department Enginee
  • Mongodb 在带有正则表达式查询的数组字段上不同?

    基本上我正在尝试在模型上实现标签功能 gt db event distinct tags bar foo foobar 进行简单的不同查询会检索所有不同的标签 但是 我将如何获取与某个查询匹配的所有不同标签 举例来说 我想获得所有匹配的标签
  • Android:尝试在运行时更改 TextView 的宽度

    我有一个文本视图 我试图在运行时更改其大小 但尺寸不变 xml文件中的代码
  • 我可以将图像表单数据传递给 PHP 函数进行上传吗?

    我正在尝试使用 jquery 和 PHP 上传图像 如下所示 HTML