views:

32

answers:

2

I'm researching solutions for a potential client. They're requesting the ability to download a large amount of MP3's (1000+) from their online catalog.

I've researched/tested building a zip containing all MP3s using ZipArchive but ran into obvious memory leak issues that have ruled that solution out.

I'm now trying to think out of the box.

One idea was to create an FTP queue or a Torrent type download link for them. Is there anything out there that can pull something like this off?

Any help or suggested direction would be greatly appreciated! Thanks!!

Edit: Here is the overall process/goal that we're trying to achieve.

The client creates music for TV/Flim placement. They maintain a online catalog AND a local copy they send to potential buyers. The online catalog and the offline catalog need to mirror each other. Problem being, they have multiple offices that will have to update their local copy with the new files added to the online catalog from many different locations

Example: East Coast User updates catalog with 100 new files. West Coast User needs to update the offline catalog with the new files retrieved from the online catalog.

We had hoped to create custom zip's of the files each user needed to update their catalog based on the user's download history that we'd maintain in MySQL. We were testing ZipArchive but we couldn't seem to build Zips over 175 MEG (give or take). We're in the process of testing ZipStreaming but are having some issues.

I hope this clears up the overall goal and problems we are facing.

+1  A: 

GNU wget? It can download recursive. Just give wget a list of all files on the server, e.G. http://www.example.org/filelist.html which contains links like file1.mp3, file2.mp3 etc (apache normally generates such an index file automatically wenn a directory without index.html/php in it gets called.

http://linux.die.net/man/1/wget

joni
look here for further explanation about recursive download. http://sunsite.ualberta.ca/Documentation/Gnu/wget-1.7/html_node/wget_11.html Don't forget the -c option (--continue), so when the download gets interrupted, you can just repeat the command with the same parameters and it will continue where it breaked.
joni
@joni We're trying to keep this as simple as possible. I don't think this direction would be that easy for their current user base. I updated the overall goal/problem above, maybe that will help explain everything. Thanks for the suggestions!
Stephen
A: 

Frankly speaking, I can't identify the actual problem/question from your post. If you are looking for minimizing network load, then you need to remember that MP3 files are not compressed well because they are already compressed (not as well as possible, but well). If you are looking for a transport, than any file transfer protocol will do (FTP, SFTP, HTTP, WebDAV).

If you need flexibility and features, I'd recommend SFTP: this is a protocol for remote file system access, so besides "get file" operation it has plenty of useful operations including machine-readable directory listing (not always available in FTP and not available in standard HTTP), built-in ZLib compression, built-in possibility to resume file transfers and more bonuses. HTTP also has ZLib compression, but this one is not always available.

Update: your approach doesn't care about what is really available on the client and you are going to prepare ZIP files based on your (possibly incorrect) knowledge of the client already has.

If the client and server are both applications that you develop, then you should use RSync protocol or something similar to update data online (not using any ZIP files) and download the files that are missing on the client. If direct communication between the client and the server is not possible, you can make the client send his state to the server and the server will prepare an individual package after that. As for ZIP functionality - it's needed only when you use batch update (no real-time communication between the client and the server). I don't know what technology you are using but if your only problem is with ZIP component, you can use something else for data packing - either different ZIP component (for .NET and VCL we have ZIP component) or some other packing solution (for example, our SolFS product doesn't have size limits). Unfortunately I am not aware of RSync-like implementation available as a component.

Eugene Mayevski 'EldoS Corp
Eugene, I updated the overall goal/problems we're facing. I hope that helps.
Stephen
@Stephen updated my answer accordingly.
Eugene Mayevski 'EldoS Corp