Лучший процесс автоматического архивирования нескольких MP3-файлов

У меня есть проект, который требует довольно сложного процесса, и я хочу убедиться, что знаю лучший способ сделать это. Я использую ASP.net C# с Adobe Flex 3. Сервер приложений — Mosso (облачный сервер), а сервер хранения файлов — Amazon S3. Существующий сайт можно просмотреть по адресу NoiseTrade.com.

Мне нужно сделать это:

  • Разрешить пользователям загружать файлы MP3 в альбом "виджет"
  • После того, как пользователь загрузил свой альбом/виджет, мне нужно автоматически заархивировать mp3 (для загрузки другими пользователями) и загрузить zip вместе с дорожками mp3 в Amazon S3.

На самом деле у меня это уже работает (используя обработку на стороне клиента во Flex), но это больше не работает из-за обновления «безопасности» Adobe flash 10. Итак, теперь мне нужно реализовать это на стороне сервера.

Как я думаю сделать это:

  • Сохраните mp3 во временной папке на сервере приложений.
  • Когда художник «публикует», создайте zip-архив файлов в этой папке, используя библиотеку С#.
  • Запустите процесс загрузки amazon S3 (zip и mp3) и отправьте электронное письмо пользователю, когда он будет завершен (а также удалите временную папку).

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

Я не знаю, как лучше всего это сделать, и буду признателен за любые ваши советы.

Спасибо!


person Mark    schedule 10.11.2008    source источник
comment
Спасибо всем за участие! Просто чтобы уточнить, заархивирование необходимо, потому что это то, что поклонники артиста будут загружать, когда они зарегистрируются через виджет. Чтобы увидеть виджеты, о которых я говорю, посетите сайт Noisetrade.com.   -  person Mark    schedule 10.11.2008


Ответы (4)


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

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

person Dave Sherohman    schedule 10.11.2008
comment
Да, zip-файлы почти всегда будут содержать более одного mp3 (чаще всего это полные альбомы). Проблема с изменением существующего zip-файла заключается в том, что ни один из файлов не находится на фактическом сервере приложений. Все они хранятся в Amazon S3 из-за затрат на пропускную способность. - person Mark; 10.11.2008
comment
Тем не менее... Как бы вы предложили изменить файл (заархивированный или нет), который находится на другом сервере? Если сервер S3 не имеет API для изменения zip-файла, то, конечно, вам придется загрузить копию старой версии, изменить ее и загрузить новую версию. Никак иначе, правда. - person Dave Sherohman; 10.11.2008
comment
Правда, в настоящее время я стримлю все треки обратно в память (используя флэш), а затем архивирую их и отправляю обратно. Думаю, мне пришлось бы передавать треки в память сервера каждый раз, когда требовался новый zip-файл. Это будет не весело :/ - person Mark; 11.11.2008

MP3 сжаты. Зачем их застегивать?

person StingyJack    schedule 10.11.2008
comment
потому что таким образом вы можете сгруппировать несколько файлов вместе, хотя на самом деле вы получаете только ту же функциональность, что и в гораздо более простом формате .tar. - person Joel Coehoorn; 10.11.2008
comment
да, заархивировано, чтобы предоставить поклонникам исполнителя простую загрузку одним щелчком мыши, а не по треку. - person Mark; 10.11.2008
comment
О... Я прочитал «Мне нужно автоматически заархивировать mp3», поэтому я подумал, что мы говорим об отдельных файлах. - person StingyJack; 10.11.2008

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

person Karl    schedule 10.11.2008

DotNetZip может архивировать файлы из C#/ASP.NET. Я согласен с предыдущими плакатами относительно сжимаемости MP3. DotNetZip автоматически пропустит сжатие MP3 и просто сохранит файл именно по этой причине. По-прежнему может быть интересно использовать zip в качестве контейнера для упаковки/архива, помимо сжатия.

Если вы позже измените zip-файл (пользователь добавит дорожку), вы можете взять .zip-файл с S3 и просто обновить его. DotNetZip также может обновлять zip-файлы. Но в этом случае вам придется оплатить стоимость перевода в S3 и обратно.

DotNetZip может делать все это с обработкой zip-файлов в памяти, хотя это может быть невозможно для больших архивов с большим количеством MP3 и большим количеством одновременно работающих пользователей.

person Cheeso    schedule 04.01.2009