Требуется ли move_uploaded_file для локального хранилища перед облачным?

Я работаю над приложением, которое позволяет пользователям загружать изображение в систему, и мы храним это изображение в облачном хранилище (S3). В настоящее время после загрузки изображения мы обрабатываем их файл, копируя временный файл локально через move_uploaded_file(), а затем используя этот локальный файл для загрузки его на S3. Является ли эта локальная копия необходимостью или можно отменить этот шаг и напрямую загрузить в облачное хранилище, даже не сохраняя локальную копию?

$temp = $_FILES['file']['tmp_name'];
$target = ABSPATH.'uploads/';
$name = $_FILES["file"]["name"];
$targetFile = $target . $name;
move_uploaded_file($temp,$targetFile);

//upload local file to s3
$this->saveToCloud($this->s3Path,$targetFile);

Прежде чем файл будет скопирован в локальное хранилище через move_uploaded_file, он будет находиться в хранилище tmp php:

/Applications/MAMP/tmp/php/phpx3uBiT

Я бы хотел просто:

 $this->saveToCloud($this->s3Path,$_FILES["file"]["tmp_name"]);

Заранее спасибо!

Пока облачное хранилище доступно пользователю веб-сервера, а путь и протокол совместимы с move_uploaded_file(), просто переместите его в облако.

AbraCadaver 18.12.2018 21:19

Мы используем SDK AWS S3 для загрузки файлов в облако через MultipartUploader(), функция оболочки принимает путь и имя файла. Вот здесь и пригодится локальная копия, и это то, с чем у меня возникают трудности.

AnchovyLegend 18.12.2018 21:20
$this->saveToCloud($this->s3Path,$_FILES['file']['tmp_name']‌​); без move_uploaded_file будет работать нормально (если это выполняется в том же запросе, что и загрузка файла, поскольку файл tmp удаляется при завершении запроса PHP).
drew010 18.12.2018 21:32

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

AnchovyLegend 18.12.2018 21:35

Временный файл будет там только в течение срока действия PHP-запроса. Вероятно, поэтому вы не можете получить к нему доступ напрямую.

drew010 18.12.2018 21:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
1
5
176
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если вы думаете о проблемах с производительностью, вам НЕ следует заботиться о move_uploaded_file, потому что он просто выполняет некоторые проверки и просто переименовывает его в имя (путь). Потребление ЦП минимально. Если место назначения временного файла не находится на внешнем жестком диске и ему потребуется транспортировка по сети.

Если вы хотите облегчить серверный процесс, вы можете рассмотреть возможность использования AWS SDK Javascript для браузера и выполнить загрузку файла прямо из клиентского браузера в корзину S3 (проверьте эту ссылку, чтобы узнать, как это сделать: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html#s3-example-photo-album-adding-photos). Используя этот способ, вы должны принять во внимание создание HTTP-запроса только для сохранения информации о файле в вашей базе данных после / до загрузки файлов.

Если вас не интересует использование AWS SDK Javascript для браузера, вы можете попробовать: $this->saveToCloud($this->s3Path,$_FILES['file']['tmp_name']); но не уверен, работает ли, не пробовал.

надеюсь, это поможет

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