Загрузите файл в браузере из CDN и установите имя загруженного файла - PullRequest
0 голосов
/ 19 августа 2011

У меня есть записи вызовов, хранящиеся в CDN (Rackspace CloudFiles) с такими именами, как:

KPOWIEJFIE2034020SVN10ASKZALBMRI.mp3

(это SID Twilio Call).

Мое приложение (CakePHP) отображает список этих записей и использует тег <audio>, чтобы их можно было воспроизвести на странице прямо из CDN. Мне нужно также добавить опцию для прямой загрузки файла, но я хочу скачать файл с именем, похожим на этот:

Звонок от Алекса в Фирму, Инк, 19.08.2011 16:00 .mp3

Я знаю, как сделать это с помощью PHP и readfile (), чтобы установить имя на то, что я хочу, но для этого требуется, чтобы данные файла передавались через мой VPS. Помимо того, что дважды выставляется счет за пропускную способность (один раз через CDN и один раз через мой VPS), это лишило бы цели наличие моих файлов в CDN (скорость и доступность). У меня есть файлы, названные только с SID вызова в CDN для безопасности.

Можно ли как-то сделать это на стороне браузера? Может ли JavaScript изменить имя загруженного файла на лету?

Я ценю любую помощь!

Ответы [ 3 ]

2 голосов
/ 19 августа 2011

Имя файла основывается на запрашиваемом URL-адресе и заголовках, прикрепленных к ответу при получении URL-адреса. Если вы не проксируете его или не создадите «дружественный» URL, указывающий на ресурс, вы не сможете контролировать, как браузер загрузит файл, поскольку запрос будет обрабатываться серверами rackspace, а не вашим кодом. *

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

1 голос
/ 19 августа 2011

Насколько я понимаю из документации, вы можете построить структуру каталогов на CDN для ваших целей.Таким образом, вместо того, чтобы полагаться на безопасность с именем файла, вы можете поместить защиту в имя каталога.Таким образом, http://cdn.example.com/KPOWIEJFIE2034020SVN10ASKZALBMRI.mp3 становится http://cdn.example.com/KPOWIEJFIE2034020SVN10ASKZALBMRI/Call_from_Alex_to_Firm,_Inc,_8-19-2011_4:00pm.mp3, который загружается именно так, как вы хотите, без ущерба для безопасности.

1 голос
/ 19 августа 2011

Вы должны иметь возможность установить Content-Disposition объекта при создании файла.Например,

PUT /<api version>/<account>/<container>/<object> HTTP/1.1
Host: storage.clouddrive.com
X-Auth-Token: 01234567-89ab-cdef-0123-456789abcdef
Content-Type: audio/mpeg
Content-Disposition: attachment; filename=Whatever_Filename_I_Want.mp3

Файл все равно будет сохранен как ваше имя <object>, но при получении он будет выглядеть как Whatever_Filename_I_Want.mp3.

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

...