работа с одновременными и прерванными загрузками, codeigniter - PullRequest
0 голосов
/ 24 января 2012

Кто-нибудь знает лучший способ справиться с одновременной загрузкой и что делать, если пользователь только частично загружает файл, а затем по какой-то причине завершает работу? (или их интернет умирает).

Вот мой контроллер: http://pastebin.com/wqnFAge6

И модель: http://pastebin.com/0S5ai2re

загрузка в контроллер

           if($this->input->post('upload')) {               
                    $uploaded_image_ids = $this->Site_model->do_upload();
                    //$uploaded_image_id = $this->Site_model->get_last();

                    $values = array(
                    'image_id' => implode(",",$uploaded_image_ids),
                    'session_id' => $this->session->set_userdata('session_id')
                    );
                    $this->session->set_userdata('edit', $values);

                    //show uploaded image
                    redirect(implode(",",$uploaded_image_ids) . '?links');

            }

Теперь все работает хорошо, за исключением того, что если я попытаюсь загрузить несколько файлов одновременно, иногда будет пропущено создание миниатюры для одного, а также, если загрузка отключена, загруженный файл остается в / images / <- вместо удаления как после загрузки и обработки. </p>

Есть идеи, как я могу исправить эти проблемы? Большое спасибо.

1 Ответ

0 голосов
/ 24 января 2012

Если ваш клиент должен потерять соединение при загрузке файлов через POST традиционным способом (без AJAX 1 ), следовательно, прервать загрузку, ваш контроллер никогда не будет выполнен, так как тело запроса не имеет маркера конца .

Что касается одновременных загрузок; такого нет (разве что с AJAX 1 ). Когда пользователь загружает несколько файлов в одной форме, они обрабатываются последовательно. Здесь - это небольшое руководство, которое я нашел, прибегая к помощи нескольких загрузок.

1 Поскольку существуют различные реализации асинхронной загрузки файлов, и я не знаком со всеми из них, этот ответ может быть недействительным хотя бы для одного из них.


Редактировать

В PHP ваше приложение запускается по запросу, поэтому параллелизма на этом уровне нет; никакие два запроса не будут обслуживаться из одного и того же экземпляра вашего приложения. Однако, предполагая, что вы работаете с одной БД, два экземпляра вашего приложения могут одновременно обращаться к одному и тому же ресурсу, и ваши движки БД должны их обрабатывать. Вы все еще можете испортить уровень приложения, не используя транзакции там, где это необходимо, но, пока вы правильно CRUD вашей БД, вашему приложению не придется явно обрабатывать параллелизм.

Что касается вашего кода, у меня нет времени, чтобы тщательно его изучить, чтобы дать вам окончательный ответ да / нет, но если вы уверены, что для каждого загруженного изображения есть запись в вашей БД и при обновлении image соответствующие данные также будут обновлены в БД, тогда у вас не будет проблем с обработкой нескольких таких запросов одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...