Изменить на исходное имя файла при загрузке? - PullRequest
3 голосов
/ 13 мая 2011

Я использую сервис amazon S3 с PHP, используя этот APIhttps://github.com/tpyo/amazon-s3-php-classЯ передаю URL-адрес клиенту, как это

https://domain.s3.amazonaws.com/bucket/filename_11052011111924.zip?AWSAccessKeyId=myaccesskey&Expires=1305311393&Signature=mysignature

Поэтому, когда клиент нажимает или вставляет URL-адрес в браузер, файл загружается с именем filename_11052011111924.zip. Но я сохранил свое исходное имя файлав БД.

Так можно ли скачивать при передаче клиенту только URL и скачивать с оригинальным именем файла. Я не уверен, поможет ли это мне.

Content-Disposition: attachment; filename=FILENAME.EXT
Content-Type: application/octet-stream

Ответы [ 3 ]

6 голосов
/ 13 мая 2011

Если вы установите заголовки, которые вы указали в файле при загрузке на S3, вы сможете загрузить файл с оригинальным именем файла.(вы также можете установить их для существующих файлов в S3 - см. документацию AWS)

Я не уверен, поддерживает ли ваша библиотека это, но вы можете сделать это с помощью AWS S3 SDK .

Что-то вроде (я не знаю php, поэтому проверьте синтаксис):

// Instantiate the class
$s3 = new AmazonS3();

$response = $s3->create_object('bucket', 'filename_11052011111924.zip', array(
    'fileUpload' => 'filename.zip',
    'contentType' => 'application/octet-stream',
    'headers' => array( // raw headers
        'Content-Disposition' => 'attachment; filename=filename.zip',
    ),
));

Обновление

Вы также можете настроить определенные заголовки каждыйраз вы генерируете новый URL.См http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/get_object_url

$url = $s3->get_object_url('bucket', 'filename_11052011111924.zip', '5 minutes', array(
    'response' => array(
          'Content-Disposition' => 'attachment; filename=filename.zip'
    )
));
1 голос
/ 13 мая 2011

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

Этот подход будетиспользуя вашу пропускную способность.

0 голосов
/ 30 ноября 2012

Да, вы можете сообщить AWS, как должен называться выходной файл:

Примечание: мы кодируем имя файла!

$filename = "Here we can have some utf8 chars.ext";
$outputFileName = '=?UTF-8?B?' . base64_encode($filename) . '?=';
$url = $s3->get_object_url(
   'bucket_name', 
   'path_to_the_file.ext', 
   '5 minutes', 
   array(
      'response' => array(
          'content-disposition' => 'attachment;' . " filename=\"" . $outputFileName . "\";")
      )
   )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...