/* * Copyright 2013 cruxframework.org. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.cruxframework.crux.core.client.utils; import org.cruxframework.crux.core.client.encoder.Base64; import org.cruxframework.crux.core.client.file.Blob; import org.cruxframework.crux.core.client.file.File; import com.google.gwt.typedarrays.client.ArrayBufferNative; import com.google.gwt.typedarrays.client.Uint8ArrayNative; import com.google.gwt.typedarrays.shared.ArrayBuffer; import com.google.gwt.typedarrays.shared.Uint8Array; /** * @author Thiago da Rosa de Bustamante * */ public class FileUtils { /** * Get the file extension based in the filename * @param fileName * @return */ public static String getFileExtension(String fileName) { String extension = ""; if(fileName == null || fileName == "") { return extension; } int i = fileName.lastIndexOf('.'); int p = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\')); if (i > p) { extension = fileName.substring(i+1); } return extension; } /** * Create a new Blob from the dataURI string * @param dataURI * @return */ public static Blob fromDataURI(String dataURI) { String[] strings = dataURI.split(","); String byteString = getByteString(strings[1], strings[0]); String mimeString = strings[0].split(":")[1].split(";")[0]; int length = byteString.length(); ArrayBuffer ab = ArrayBufferNative.create(length); Uint8Array ia = Uint8ArrayNative.create(ab); for (int i = 0; i < length; i++) { ia.set(i, StringUtils.charCodeAt(byteString, i)); } return Blob.createIfSupported(ab, mimeString); } /** * Create a new File from the dataURI string * @param dataURI * @param fileName * @return * */ public static File fromDataURI(String dataURI, String fileName) { //TODO check status of https://bugzilla.mozilla.org/show_bug.cgi?id=819900 return File.createIfSupported(fromDataURI(dataURI), fileName); } /** * convert base64/URLEncoded data component to raw binary data held in a string * @param str * @return */ private static String getByteString(String str, String mimeDecl) { String byteString; if (mimeDecl.indexOf("base64") >= 0) { byteString = Base64.decode(str); } else { byteString = JsUtils.unescape(str); } return byteString; }; }