Dropzone.js и API Dropbox

Я реализую в своей системе dropzone.js для загрузки файлов на сервер или в Dropbox в зависимости от размера файла.

И я также использую сладкие оповещения для уведомлений.

Когда файл загружается на мой сервер зона сбросаработает правильно, но когда он загружается на дропбокс не возвращает никаких результатов

тест с файлами больше 6 Мб

Демо здесь

и у них полоса загрузки не работает должным образом

Dropzone.js

HTML:

<form id = "cuadro" action = "" class = "dropzone">

</form>
<p id = "texto_carga" style = "color: #009688; display:none">Espera mientras se procesa el archivo...</p> 

JS:

<script type = "text/javascript">
     var errors = false;
     var Dropzone = new Dropzone("#cuadro", {
     url: "../utilidades/pruebasupload.php?id=<?=$personaId?>&codigo=<?=$codigo?>",
     acceptedFiles: ".EDF,.edf,.pdf,.PDF,.rar,.RAR,.jpg,.png,.gif",
     maxFiles: 1,
     error:function(){
       errors = true;
     },
     processing:function(){ 
        $('#texto_carga').show();
     },
     complete:function(){
        if (errors){
          swal({
             title: 'Error al cargar el achivo!',
             text: 'Ha ocurrido un error al intentar cargar el archivo. Póngase en contacto con el administrador del sistema',
             type: 'error',
             icon: 'error'
          });
          $('#texto_carga').hide();
        }else{
          swal({
             title: 'Carga completa!',
             text: 'Hemos cargado el archivo de la prueba exitosamente',
             type: 'success',
             icon: 'success'
          });  
          $('#texto_carga').hide();
        }
      }
   });
</script>

PHP pruebasupload.php

require_once "../terceros/dropbox/vendor/autoload.php";
require_once '../clases/servidor_archivos_controller.php';
require_once '../clases/conexion.php';

use Kunnu\Dropbox\Dropbox;
use Kunnu\Dropbox\DropboxApp;
use Kunnu\Dropbox\DropboxFile;

$conexion = new conexion;
$_servidor = new servidorArchivos;

$data = $_servidor->buscarConexion();
$dropboxKey = "";
$dropboxSecret = "";
$acessToken = "";
$appName= "";
$megas = "";

if (empty($data)){
    $megas = 200000;
}else{
    $dropboxKey = $data[0]['Keyapp'];
    $dropboxSecret = $data[0]['Secret'];
    $acessToken = $data[0]['Token'];
    $appName= $data[0]['Appname'];
    $megas = $data[0]['Megas'];
    $megas = ($megas * 1024) * 1024 ;
}
 
 
 
 
if ($tama[0]>$megas){
    try{
     //upload file to dropbox
     $file = $dropbox->simpleUpload($tempFile,$nombredropbox, ['autorename' => true]);  
     //share a file
     $response = $dropbox->postToAPI("/sharing/create_shared_link_with_settings", ["path" => $nombredropbox, "settings" => ['requested_visibility' => 'public']]);
    $data = $response->getDecodedBody();
    $link = $data['url'];
    //save link to document in to DB
    $query = "insert into pruebas_archivos (Codigo,Archivo,Ubicacion)values('$savecodge','$nombredropbox','2')";
                $datos=  $conexion->NonQuery($query); 
                http_response_code(200);
             }catch(\EXCEPTION $e){
                ERROR('001',$E);
                http_response_code(400);
             }
        }else{
            $targetPath = "../public/pruebas/";  
            $targetFile =  $targetPath.$id ."_". $nombreCompleto;  //5
            move_uploaded_file($tempFile,$targetFile);
            //save the url into DB
            $query = "insert into pruebas_archivos (Codigo,Archivo,Ubicacion)values('$savecodge','$nombreCompleto','1')";
            $conexion->NonQuery($query); 
            http_response_code(200); 
      
        }
}        
        
    function error($numero,$texto){
    $ddf = fopen('error.log','a');
    fwrite($ddf,"[".date("r")."] Error $numero: $texto\r\n");
    fclose($ddf);
  }

Файл инициализации PHP Dropzone.js и API DropboxDropzone.js и API Dropbox

Что именно «не возвращает никаких результатов»? Ваш PHP-скрипт, кажется, отвечает либо кодом состояния 200, либо 400 в случае ошибки. Какие «результаты» вы ожидаете увидеть где именно сейчас?

misorude 10.07.2019 12:03

Мне нужно, чтобы система возвращала 200, если она загрузила файл, или 400, если нет. но иногда файл был загружен правильно, но не возвращает никаких результатов

Wilfredo Aleman 10.07.2019 12:18

В смысле, что именно? Клиентская часть просто «зависает», а в completeобработчик вообще не заходит? Что-то другое? Что вы наблюдаете в сетевой панели инструментов разработчика браузера?

misorude 10.07.2019 12:46

Я подготовил для вас демо. вы найдете его в тексте вопроса

Wilfredo Aleman 10.07.2019 13:08

Вы проверили директивы post_max_size и upload_file_maxsize в php.ini? ссылка

Diogo Sgrillo 12.07.2019 11:16

@DiogoSgrillo да, есть, allow_url_fopen On display_errors Off error_reporting E_ALL file_uploads On include_path .:/opt/alt/php72/usr/share/pear log_errors On mail.force_extra_parameters no value max_execution_time 10800 max_input_time 10800 memory_limit 128M open_basedir no value post_max_size 128M session.save_path /opt/alt/php72/var/lib/php/session short_open_tag On upload_max_filesize 1G

Wilfredo Aleman 12.07.2019 11:20

@DiogoSgrillo Но проблема не в этом. Это работает правильно. проблема возникает, когда я пытаюсь загрузить файл в дропбокс

Wilfredo Aleman 12.07.2019 11:22

Я только что попытался загрузить файл, используя вашу демку, и скрипт умер ровно на 30-й секунде. Вы используете FastCGI? Возможно, для параметра idle_timeout установлено значение 30 с.

Diogo Sgrillo 12.07.2019 12:45

Я не использую FastCGI, на самом деле я никогда не слышал об этом раньше. Как я могу это реализовать?

Wilfredo Aleman 12.07.2019 12:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
9
560
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я протестировал вашу демонстрацию и время от времени мог загружать файлы размером более 6 МБ. Иногда во время загрузки скрипт умирал ровно на 30-й секунде.

Таким образом, кажется, что логика вашего кода в порядке, но на вашем сервере происходит тайм-аут. Как вы уже указали, max_execution_time и max_input_time, кажется, правильно установлены (я бы дважды проверил с phpinfo();), но в зависимости от сервера, на котором вы работаете, у вас могут быть другие места для проверки.

  • Если он работает на Apache, проверьте директиву httpd.conf the TimeOut.
  • Если вы используете php-fpm, проверьте www.conf директиву request_terminate_timeout.
  • Если вы используете nginx, проверьте директиву fastcgi_read_timeout

ссылка

поделились скриншотами файлов

Wilfredo Aleman 16.07.2019 12:17

Прежде всего, создайте файл phpinfo.php с помощью <?php phpinfo(); и проверьте вывод в браузере. Если значения отличаются от вашего отпечатка, вы должны найти правильный php.ini для редактирования. Если они равны, вместо этого вы должны найти конфиг на сервере (не на php, но, вероятно, на apache)

Diogo Sgrillo 16.07.2019 12:23

Другие вопросы по теме