API接口 上传图片 后端PHP接收

提前摆上重要的事情

ajax 提交图片, PHP获取不到, 需要 file_get_contents(‘php://input’) 才能获取到

查了各种代码与论坛, 翻阅了Google, 都是再说 multipart/form-data 不支持
确实如果在Ajax提交的时候, 加上头部 'Content-Type': 'multipart/form-data'
后端需要通过 file_get_contents('php://input')  获取

解决方案

一定不要加上指定头部 ‘Content-Type’: ‘multipart/form-data’
JS代码中加上: contentType: false



================================ 以下是参考代码 ================================

JS代码

function upload() {
        var formData = new FormData();
        formData.append('image', $("#upimg")[0].files[0]); // 添加到请求体
        formData.append('id', "37");  // 添加其它的参数

        $.ajax({
            type: "POST",
            url: '/api/test',
            dataType: 'json',
            headers: {
                'Authorization': token_type + ' ' + access_token  // laravel的API登陆后的token
                // , 'Content-Type': 'multipart/form-data'  // 这里注释了 这里是最重要的地方, 博主在这里踩坑了!!!!
            },
            data: formData,
            async: false,
            cache: false,
            contentType: false, // 注意这里, 默认值: true。默认情况下,通过data选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型 “application/x-www-form-urlencoded”。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。
            processData: false,  // 这里也一定要加,  默认为true,当设置为true的时候,jquery ajax 提交的时候不会序列化 data,而是直接使用data
            beforeSend: function () {
                // 自行处理
            },
            success: function (data) {
                // 自行处理
            },
            complete: function () {
                // 自行处理
            },
            error: function (err) {
                // 自行处理
            }
        });
    }

Laravel PHP后端代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    public function go(Request $request)
    {
        // 这里博主就简单验证了下, 逻辑自行处理
        return response()->json(request()->file("image")->isValid(), 200);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值