public static String encodeFromFile(String filename) throws java.io.IOException {

		String encodedData = null;
		Base64.InputStream bis = null;
		try {
			// Set up some useful variables
			java.io.File file = new java.io.File(filename);
			byte[] buffer = new byte[Math.max((int) (file.length() * 1.4 + 1), 40)]; // Need
																						// max()
																						// for
																						// math
																						// on
																						// small
																						// files
																						// (v2.2.1);
																						// Need
																						// +1
																						// for
																						// a
																						// few
																						// corner
																						// cases
																						// (v2.3.5)
			int length = 0;
			int numBytes = 0;

			// Open a stream
			bis = new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)),
					Base64.ENCODE);

			// Read until done
			while ((numBytes = bis.read(buffer, length, 4096)) >= 0) {
				length += numBytes;
			} // end while

			// Save in a variable to return
			encodedData = new String(buffer, 0, length, Base64.PREFERRED_ENCODING);

		} // end try
		catch (java.io.IOException e) {
			throw e; // Catch and release to execute finally{}
		} // end catch: java.io.IOException
		finally {
			try {
				bis.close();
			} catch (Exception e) {
			}
		} // end finally

		return encodedData;
	} // end encodeFromFile