A 'contents' key is required laravel $request->attach

Передаю такие данные

^ array:7 [
      "object_type" => "product"
      "object_ids" => array:2 [
        0 => "1050"
        1 => "1051"
      ]
      "image_link_type" => "A"
      "position" => 1
      "image_path" => Illuminate\Http\UploadedFile {#345
        -test: false
        -originalName: "Снимок экрана от 2024-04-18 16-33-17.png"
        -mimeType: "image/png"
        -error: 0
        #hashName: null
        path: "/tmp"
        filename: "phpioPbMN"
        basename: "phpioPbMN"
        pathname: "/tmp/phpioPbMN"
        extension: ""
        realPath: "/tmp/phpioPbMN"
        aTime: 2024-04-25 11:16:10
        mTime: 2024-04-25 11:16:10
        cTime: 2024-04-25 11:16:10
        inode: 8530985
        size: 45458
        perms: 0100600
        owner: 1001
        group: 1001
        type: "file"
        writable: true
        readable: true
        executable: false
        file: true
        dir: false
        link: false
      }
      "type" => "default"
      "detailed" => "detailed"
    ]


    отправляю запрос таким образом




$response = $this->post($payload, 'full_url/upload-and-attach',
                function (PendingRequest $request) use ($image, $imageName) {
                    $request->attach('image_path', $image, $imageName);
            });

выходит ошибка

A 'contents' key is required {"file":"/var/www/dictionary-service/vendor/guzzlehttp/psr7/src/MultipartStream.php:90"}

Посмотрел это поле в MultipartStream там не может обрабатывать мой object_ids так как там массив

а тот эндпоинт который я обращаюсь принимает только массив иначе ошибка валидаций

$request->attach почему то проходит по всем полям массива а не только по image_path который я ему указал

Если убрать object_ids с массива то запрос доходит и придет ответ 422 ошибка валидаций


Ответы (1 шт):

Автор решения: noobaster

Попробуйте вторым параметром передать file_get_contents('путь_до_файла'),

$request->attach('image_path', file_get_contents('путь_до_файла'), $imageName);

Я для отправки файлов использую фасад Illuminate\Support\Facades\Http:

 Http::attach('document', file_get_contents('путь до файла'),'имя_файла')
            ->post('url');
→ Ссылка