当前位置: 首页 > news >正文

简单的异步图片上传

需要引用 jQuery

<script>
/**
* input type=file 选择器
*/
function upload(id){
            var fileList = $('#' + id)[0].files;
            var formData = new FormData();
            formData.append('type', 'cardorder');
            formData.append('file', fileList[i]);
            $.ajax({
//                    url: '/homev1/mine/upload.html',
                url: '/mobile/view/homev1/open_card_upload.php',
                type: 'POST',
                cache: false,
                data: formData,
                dataType: "json",
                processData: false,
                contentType: false,
                success: function (rs) {
                var img = $('#' + id).parents('.img_list');
                if (rs.code == 200 || rs.code == 1) {
                    $(img).find('.default').before('<div class="image_box clearfloat"><div class="del_btn"></div><input type="hidden" name="image" value="' + rs.image + '"><img src="' + rs.image + '" /></div>');
                } else {
                    $.msg.error(rs.msg);
                }
                }
            })
        }
</script>

大概意思就是用js创建一个from 表单,获取显示页面的文件 进行数据传递

php后台示例

<?php

/**
 * @author lianyu001 <1411479499@qq.com>
 * @time 2025年2月14日 01:43:44
 */
require_once WY_ROOT . '/Common.php';
include_once dirname(WY_ROOT) . '/ApiV1/start.php';
include_once dirname(WY_ROOT) . '/ApiV1/mysqli_model.php';
include_once dirname(WY_ROOT) . '/ApiV1/ALLClass.php';

use OSS\OssClient;

header('Content-Type:application/json; charset=utf-8');
$arr = array(); //最外层数组,转json后返回
$msg = "文件上传成功";  //错误时返回错误信息
$code = 1;  //成功信息,其他为错误信息代码
$image = '';
$type = _P('type'); //cardorder
$file = _P('file'); //binary
if (!isset($_FILES['file'])) {
    (new ALLClass())->ajaxReturn(['code' => 412, 'msg' => 'Parameter not found.']);
}
//type==cardorder
//获取上传文件信息
$getFile = $_FILES['file']['tmp_name'];
//上传文件后缀
$ext = substr($_FILES['file']['name'], strrpos($_FILES['file']['name'], '.') + 1);

$allowed_types = ['img', 'gif', 'png', 'jpg', 'jpeg'];
if (in_array($ext, $allowed_types)) {

//重命名文件上传名字
//生成订单号
    date_default_timezone_set('PRC');
    $mtimestamp = sprintf("%.3f", microtime(true)); // 带毫秒的时间戳 
    list($msec, $sec) = explode('.', $mtimestamp);
    $datetime = date("YmdHis", $msec) . $sec;
    $order_sn = getRandomString(3) . $datetime;

    $new_fliename = $order_sn;
    $date_path = date('Y-m-d');
    $type = 'survey';
    $oss_path = 'upload/' . $type . '/' . $date_path . '/' . $new_fliename . '.' . $ext;

    $file_path = $getFile;
    $bucketName = Common::getBucketName();
    $ossClient = Common::getOssClient();

    $oss_http = AliConfig::OSS_HTTP;
    if (is_null($ossClient)) {
        $msg = '文件上传失败';
        $code = '400';
    } else {
        try {
            $ret_flag = $ossClient->uploadFile($bucketName, $oss_path, $file_path);
            $image = $oss_http . $oss_path;
            //保存上传数据,用来删除
            $mod = new Mysqli_model('oss_upload');
            $mod->linkmysql(DB_K_WEIXIN_WAP);
            if (!session_id())
                session_start();
            $mod->up(['path' => $oss_path, 'http_host' => $oss_http, 'user_id' => ($_SESSION['wxuser']['uid'] ? $_SESSION['wxuser']['uid'] : 0)]);
            $mod->closemysql();
            //文件大于1M
            if ($_FILES['file']['size'] > 1 * 1024 * 1024) {  //图片大于1M
                $image = $oss_http . $oss_path . '?x-oss-process=image/quality,Q_40';
            }
        } catch (Exception $e) {
            $pub = new ALLClass();
            $pub->data_log('AliOss文件上传失败:' . $e->getMessage() . ",未上传的文件名 " . $file_path, 'survey.log');
            $msg = '文件上传失败';
            $code = '400';
        }
    }
} else {
    $msg = '文件上传失败';
    $code = '400';
}

$arr['msg'] = $msg;
$arr['code'] = $code;
$arr['image'] = $image;
echo json_encode($arr, JSON_UNESCAPED_UNICODE); //返回

相关文章:

  • 游戏引擎学习第104天
  • ABB能源自动化选用宏集Cogent DataHub避免DCOM问题,实现高效、安全的数据传输
  • cuML机器学习GPU库
  • vue3的响应式的理解,与普通对象的区别
  • ROS基本功能
  • 【吾爱出品】视频素材资源搜索、解析、下载助手
  • 深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
  • 自动化运维之ansible快速入门
  • Ubuntu24.04更新国内源
  • Facebook精准获客:外贸企业如何通过社群营销将产品推广到海外
  • 【2025最新版】软件测试面试题总结(150道题含答案解析)
  • C++ 后台开发简历优化指南和如何利用DeepSeek优化简历
  • 【MySQL数据库】Ubuntu下的mysql
  • 侯捷 C++ 课程学习笔记:C++ 面向对象开发的艺术
  • 协议-NVME
  • springboot整合mybatis-plus(保姆教学) 及搭建项目
  • 离线量化算法和工具 --学习记录1
  • mongodb主从
  • Linux软件编程——标准IO(2025.2.14)
  • 数据库学习 第一次练习
  • 广西钦州:坚决拥护自治区党委对钟恒钦进行审查调查的决定
  • 2025年度上海市住房城乡建设管理委工程系列中级职称评审工作启动
  • 四川资阳市原市长王善平被双开,“笃信风水,大搞迷信活动”
  • 比特币价格时隔三个月再度站上10万美元
  • 国家卫健委:有条件的二级及以上综合医院要开设老年医学科
  • A股26家游戏企业去年营收近1900亿元:过半净利下滑,出海成为主流选择