У меня есть следующий код:
Я создаю URL для загрузки приложения, используя метод CloudStorageTools :: createUploadUrl () следующим образом:
require_once 'google/appengine/api/cloud_storage
/CloudStorageTools.php';
use google\appengine\api\cloud_storage\CloudStorageTools;
$options = [ 'gs_bucket_name' => 'myuserpics' ];
$upload_url =
CloudStorageTools::createUploadUrl('/upload_handler.php', $options);
Я использую вышеуказанный URL-адрес в качестве действия для формы, которую я использую для принятия загрузок, следующим образом:
<form action="<?php echo $upload_url?>"enctype="multipart/form-data" method="post">
Files to upload: <br>
<input type="file" name="uploaded_files" size="40">
<input type="submit" value="Send">
</form>
Ниже приводится содержимое файла upload_handler.php:
<?php
var_dump($_FILES);
?>
Я начинаю загрузку по указанному выше URL-адресу в течение 10 минут после его создания и получаю следующий вывод:
array(1) {
["userfile"]=> array(5) {
["name"]=> array(1) {
[0]=> string(11) "fashion.jpg"}
["type"]=> array(1) {
[0]=> string(10) "image/jpeg"}
["tmp_name"]=> array(1) {
[0]=> string(200) "gs://myuserpics/***VERY LONG STRING***"}
["error"]=> array(1) {
[0]=> int(0)
} ["size"]=> array(1) {
[0]=> int(59527)
}
}
}
Разрешения, установленные для сегмента «myuserpics», являются разрешениями по умолчанию.
Когда я смотрю в ведро, я не вижу загруженное изображение.
Из консоли разработчиков Google я могу загрузить изображение, а затем увидеть его в корзине. Однако, если изображение загружено из приложения, я не вижу его в корзине. Что я делаю неправильно?
Ты звонил move_uploaded_file во время выполнения скрипта переместить файл из временного имени файла GCS?
В конце выполнения скрипта все временные файлы (например, $ _FILES [‘userfile’] [‘tmp_name’]) собираются и удаляются из корзины.
Эта проблема:
В моем коде после загрузки изображения я сразу же отображаю его и под ним предоставляю пользователю форму для заполнения заголовка изображения. После того как пользователь отправит форму, я переименую изображение и сохраню его новое имя и заголовок в базе данных. Эта процедура работала хорошо больше года до этой недели.
Решение:
Как только изображение загружено, я переименовываю его перед отображением вместе с соответствующей формой.
Заключение:
PHP или GAE внесли изменения, которые приводят к тому, что «сборка мусора» происходит намного быстрее, чем раньше. Если это не так, то почему я больше не могу ждать, пока пользователь отправит форму, прежде чем переименовать изображение?
Примечание: я не использую move_uploaded_file, как предложено ранее, потому что я не хочу менять местоположение изображения.