我可以将图像表单数据传递给 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 函数进行上传吗? 的相关文章

  • yii2 无线电内联 Html 帮助器

    我在 yii2 中有这个 radioList Html radioList abc null new class gt form control input sm 它生成这个 div class radio 但我想要 div class r
  • 为什么“事件”在 Chrome 中全局可用,而在 Firefox 中则不然?

    在回答另一个问题时 出现了一个与event对象在匿名函数中可用 无需传入 在 Chrome 中 下面的代码工作正常 但 Firefox 会抛出错误 document ready function uspsSideboxTrackingClo
  • jQuery Mobile - 停止缓存

    就我而言 链接加载到特殊 div 的包装器中 这些包装器是其链接的父级 我通过pageload event 当 JQuery Mobile 执行 AJAX 请求时一切正常 但是如果我点击访问的链接 jquery mobile不会发送请求 而
  • 支持通过 OAuth 进行 Facebook/Twitter 身份验证的 CAS 服务器

    我正在寻找一个支持 Facebook Twitter 通过 OAuth 进行单点登录身份验证的 CAS 服务器 我检查过 JASIG CAS 服务器 但它看起来不支持它们 我的 java web 应用程序基于 Spring Security
  • JQuery 可滚动文本

    我正在寻找一个 jquery 插件 它将在可滚动框中绑定文本 大多数滚动插件都会转换浏览器滚动条 但我想保持它的原样和可用 这只是为了在较小的空间内包含大量的文本 就像这样page http www class pm files jquer
  • 使用 OpenSSL 在 PHP 中进行 AES 加密/在 Node.js 中进行解密

    我正在使用 PHP 和 Nodejs 使用 OpenSSL 进行对称加密 PHP 使用 OpenSSL 库 Node js 解密基于实现的加密 问题是 Node js 中的解密文本只是部分正确 PHP 加密函数 function encry
  • 如何在 PHP 中使用 file_get_contents 获取图像的 MIME 类型

    我需要获取图像的 MIME 类型 但我只有图像的正文file get contents 是否有可能获取 MIME 类型 是的 你可以这样得到它 file info new finfo FILEINFO MIME TYPE mime type
  • PhpPresentation imagecreatefromstring():数据不是可识别的格式 - PHP7.2

    我正在尝试使用 PhpPresentation 来阅读sample pptx使用文档中为读者提供的简单说明进行文件处理 我得到 imagecreatefromstring Data is not in a recognized format
  • 如何使用 jQuery 通过 Ajax 发送复选框数组的值?

    我有一个包含很多表单字段的表单 12 x n 行 每行中的第一个字段 代表产品 是一个类似于以下内容的复选框
  • 如何创建增量加载网页

    我正在编写一个处理大量数据的页面 它会永远持续到我的结果页面加载 几乎无限 因为返回的数据太大了 因此 我需要实现一个增量加载页面 例如 url 中的页面 http docs python org http docs python org
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • 如何将当前元素传递给 Knockout.js 绑定中的 Javascript 函数?

    因此 我尝试根据是否选中子复选框 使用 Knockout js 将类添加到元素 为此 我试图通过this作为我的函数的参数 目前 我的精简 DOM 结构如下 tr td td tr
  • Paypal IPN 发送“待处理”并以“多币种”为理由?

    我正在使用 Paypal IPN 从我的网站收款 该网站目前仅处于开发阶段 因此我建立了一个沙盒网站进行测试 并且我已经通过在英国注册的测试帐户非常成功地以英镑货币 我的居住国货币 进行付款 但是 我希望该网站能够检测访问者的原籍国并允许他
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 使用 JQuery 预填充选择字段的下拉选项验证

    我有这个 JQuery 片段来防止选择已在另一个字段中选择的下拉选项 var coll select name service on change function coll each function var val this value
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内

随机推荐

  • 启用/安装 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