2011 September
September 22, 2011
Extract z01 files on Mac OS X – howto
The first of multiple files that make up a split archive created with WinZip; uses the same compression as a standard .ZIP file, but must be decompressed along with the related split archives (.Z02, .Z03, etc.).
Split archives are often used to shrink the size of large files for e-mail attachments or file downloads. They can only be decompressed if all the split archive segments are available.
To decompress a series of z01, z02… files you need to do the following
1) Change all .z01, .z02 extensions to .001, .002 and so on.
2) The last extension in compressed series will have a .zip extension. If you have 8 segments, change .zip to .008.
3) Join all segments using “MacHacha”
4) Change the extension of the file produced by MacHacha to .zip
5) Use “The Unarchiver” to decompress the .zip file produced by MacHacha.References:
Top
http://www.fileinfo.com/extension/z01I tried uploading a large file from Flash to php back end and got the following error:
PHP Warning: POST Content-Length of 18348279 bytes exceeds the limit of 8388608 bytes
It’s self explanatory, my PHP installation by default only allows up to 8MB of data to be uploaded to the server. To solve this you need to change the following 2 variables in php.ini file:
post_max_size = 8M
and
upload_max_filesize = 2MMarko
TopSeptember 12, 2011
Load files from Amazon S3 into Flash using AS3 Bulk Loader
I had a go at loading some assets from Amazon S3 with AS3 bulk loader and ran into trouble. Generally I specify loader context when I load files from external source, but I thought Bulk Loader handled it all internally. After browsing the source code I found out that you can pass the LoaderContext into each loading item.
You can specify LoaderContext for each BulkLoader item like so:
var context:LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain); var loader:BulkLoader = new BulkLoader("myBulkLoaderInstance"); loader.add( amazonS3Domain, { context: context } );Thanks to Trevor Hartman for this snippet.
Also “Using Amazon S3 with Adobe Flash and Microsoft Silverlight” article has some useful tips on this topic as well as crossdomain policy files.
I haven’t tried using this technique to load files from other APIs such as Facebook, so I’d imagine you’d have to follow the same approach.
Marko
TopSeptember 10, 2011
MySQL REPLACE statement with dynamic variables
I just wrote a little mysql snippet that will replace all instances of ‘domain1′ to ‘domain2′ in a given table and column. So why not share it. All you need to do is set the variable values in first 4 lines of code below:
SET @tblname = "tablename"; SET @colname = "columnname"; SET @lookfor = "'domain1'"; SET @replacewith = "'domain2'"; SET @qry = CONCAT('UPDATE ',@tblname, ' SET ', @colname, ' = REPLACE(' ,@colname, ',', @lookfor, ',',@replacewith,')'); PREPARE QUERY FROM @qry; EXECUTE QUERY;
Obviously, you can use this technique to construct any MySQL query.
Cheers
Top
MarkoThis week I had to unzip some files using ColdFusion 7 (I know it’s ancient technology) and I realised that CF7 doesn’t natively support zipping/unzipping of files! Fortunately, ColdFusion can utilise the underlying power of Java to achieve this. I found this neat Java article – Unzipping Files with java.util.zip.ZipFile and simply translated it into ColdFusion 7.
Here is the ColdFusion version that works well on CFMX7:
<cfparam name="dest" default="/path_to_extract/"> <cffunction name="getByteArray" access="private" returnType="binary" output="no"> <cfargument name="size" type="numeric" required="true"/> <cfset var emptyByteArray = createObject("java", "java.io.ByteArrayOutputStream").init().toByteArray()/> <cfset var byteClass = emptyByteArray.getClass().getComponentType()/> <cfset var byteArray = createObject("java","java.lang.reflect.Array").newInstance(byteClass, arguments.size)/> <cfreturn byteArray /> </cffunction> <cfscript> if(structKeyExists(form,"myFile") and len(form.myFile)) { content = ArrayNew(1); FileOutputStream = createObject('java',"java.io.FileOutputStream"); BufferedOutputStream = createObject('java',"java.io.BufferedOutputStream"); ZipFile = createObject('java',"java.util.zip.ZipFile"); ioFile = createObject('java',"java.io.File"); Byte = createObject('java',"java.lang.Byte"); buffer = getByteArray(1024); length = 0; zipFileName = form.myFile; zFile = ZipFile.init(zipFileName); entries = zFile.entries(); while(entries.hasMoreElements()) { entry = entries.nextElement(); if(entry.isDirectory()) { // Assume directories are stored parents first then children. ioFile.init(dest & entry.getName()).mkdir(); continue; } in = zipFile.getInputStream(entry); out = BufferedOutputStream.init(FileOutputStream.init(dest & entry.getName())); length = in.read(buffer); while(length gte 0) { out.write(buffer, 0, length); length = in.read(buffer); } in.close(); out.close(); } zFile.close(); //loop tghrough content array and decrypt } </cfscript> <form name="myForm" method="POST" action="zip.cfm" enctype="multipart/form-data"> <input type="file" name="myfile" /> <input type="submit" name="submit" value="Upload" /> </form>
Cheers
Top
Marko