Не могу передать изображения на сервер

240
14 апреля 2017, 22:37

Есть несколько полей такого типа <input type="file" name="file1">в которых я выбираю изображения. Мне нужно с помощью ajax залить их на imgur, а ссылку вернуть в ответе. Проблема в том, что не знаю как правильно передать изображения в $_FILES['img'].

JS

$.each($("[name=file"+i+"]"), function(i, obj){
            $.each(obj.files,function(i,file){
                $.ajax({
                    url: 'imgur.php',
                    data: file,
                    processData: false,
                    contentType: false,
                    type: 'POST',
                    success: function(data){
                        if(data != '') {
                            arr.push(data); // записываю ответ в массив
                        }
                    }
                })

PHP

<?php
    if (isset($_FILES['img'])) {
        $file = $_FILES['img'];
        if ($file['name'] != '') {
            $filename = $file['tmp_name'];
            $client_id = "***************";
            $handle = fopen($filename, "r");
            $data = fread($handle, filesize($filename));
            $pvars   = array('image' => base64_encode($data));
            $timeout = 30;
            $curl    = curl_init();
            curl_setopt($curl, CURLOPT_URL, 'https://api.imgur.com/3/image.json');
            curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id));
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars);
            $out = curl_exec($curl);
            curl_close ($curl);
            $pms = json_decode($out,true);
            $url=$pms['data']['link'];
            if ($url!="") {
                $url = str_replace('http://', 'https://', $url );
                $imgname = preg_replace('/\.[^.]+$/','',$file['name']);
                echo $url;
            }
        }
    }
?>
Answer 1

Сделай через Guzzle, вот пример

http://stackoverflow.com/questions/38133244/upload-file-using-guzzle-6-to-api-endpoint

Answer 2

Сделайте так:

   <form id="upload">
   <input type="file" name="file">
   <button type="submit">Upload</button>
   </form>
<script>
$( document ).ready(function() {
    $("#upload").submit(function(e){
        e.preventDefault();
        var form=($(this)[0]);
        var formdata=new FormData(form);
        $.ajax({
                    url:'url.php',//обработчик
                    type:'POST',
                    data:formdata,
                    enctype:'multipart/form-data',
                    processData:false,
                    contentType:false,
                    success:function(data){
                    //в случае успешной загрузки
                    },
                    error: function (data) {
                    //в случае ошибки
                    }
        });
    });
    });
</script>

В обработчике проверяться с помощью $_POST['file']

READ ALSO
Как обернуть каждый элемент в контейнер jQuery

Как обернуть каждый элемент в контейнер jQuery

Мне нужно выбрать все элементы a обернуть кадлый из них в li и добавить в ul с id="menu"

263
Выводить страницу оплаты в iframe

Выводить страницу оплаты в iframe

Есть форма с данными, которая автоматически при нажатии кнопки submit отправляется на сайт robokassa (в action у формы стоит ссылка на страницу оплаты)Как...

201
Математическая библиотека для JavaScript

Математическая библиотека для JavaScript

Есть ли какая-нибудь JavaScript-библиотека, которая включает в себя задание разного рода уравнений и умеет строить для них графики? Спасибо

283