2015-02-22 1 views
0

У меня есть следующий код:файл изображения успешно загружены с помощью приложения Google App Engine не существует в ведре

Я создаю 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 Developers Console я могу загрузить изображение, а затем увидеть его в ведре. Однако, если изображение загружено из приложения, я не вижу его в ведре. Что я делаю не так?

ответ

1

Вы звонили move_uploaded_file во время выполнения сценария, чтобы переместить файл из временного имени файла GCS?

В конце выполнения сценария все временные файлы (то есть $ _FILES ['userfile'] ['tmp_name']) собираются и удаляются мусором из ведра.

+0

Я не называю move_uploaded_file, потому что его цель - переместить загруженный файл в новое место, и я не хочу этого делать. Я хочу, чтобы файл оставался в ведре, в который он загружен. – user3008679

+0

Прочитайте: http://php.net/manual/en/features.file-upload.post-method.php и обратите внимание на строку «Независимо от логики, вы должны либо удалить файл из временного каталога, либо перенести его в другое место «. –

+0

[Извините, вы не можете отредактировать последний комментарий] - Также строка «Файл будет удален из временного каталога в конце запроса, если он не был удален или переименован.»в этой же ссылке. –

0

Проблема:

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

Решение:

Как только изображение загружено, переименовать его перед выводом на экран вместе с его ассоциированной форме.

Вывод:

Изменения были сделаны либо PHP или GAE, который вызывает «сборки мусора», происходит гораздо быстрее, чем раньше. Если это не так, то почему я больше не могу ждать, пока пользователь отправит форму перед переименованием изображения?

Примечание: Я не использовал move_uploaded_file, как было предложено ранее, потому что я не хочу менять местоположение изображения.

+0

FWIW move_uploaded_file - это то же самое, что копировать файл, а затем отсоединить его. –

+0

Когда вы используете move_uploaded_file, вы можете переместить файл из одного каталога в другой. Когда вы переименовываете файл, что и есть Я делаю все это время и продолжаю делать, вы просто меняете имя файла и не можете переместить его из одного каталога в другой, просто переименовав его. Поэтому две процедуры, конечно, не совпадают. – user3008679

+0

Что? Http: //php.net/manual/en/function.rename.php «Попытка переименовать oldname в новое имя, переместив его между каталогами, если это необходимо» –

Смежные вопросы