package controllers; import java.io.File; import java.io.IOException; import java.util.List; import org.bson.types.ObjectId; import play.modules.morphia.Model.MorphiaQuery; import com.mongodb.gridfs.GridFS; import com.mongodb.gridfs.GridFSDBFile; import com.mongodb.gridfs.GridFSInputFile; import com.withiter.common.ContentType; public class UploadController extends BaseController { private static String MERCHANT_IMAGE = "MerchantImage"; private static String USER_IMAGE = "UserImage"; private static String SHARE_IMAGE = "ShareImage"; private static String ACTIVITY_IMAGE = "ActivityImage"; @SuppressWarnings("unused") private static GridFSInputFile uploadFirst(String param) { GridFSInputFile gfsFile = null; File[] files = params.get(param, File[].class); for (File file : files) { try { gfsFile = UploadController.saveBinary(file, null); break; } catch (IOException e) { e.printStackTrace(); } } if (gfsFile == null) { return null; } else { return gfsFile; } } /** * Save file * @param file * @return * @throws IOException */ public static GridFSInputFile saveBinary(File file, String mid) throws IOException { GridFS gfs = new GridFS(MorphiaQuery.ds().getDB(), MERCHANT_IMAGE); GridFSInputFile gfsFile = gfs.createFile(file); String fName = file.getName(); String suffix = fName.replaceFirst("^.*\\.", "."); gfsFile.setContentType(ContentType.get(suffix)); gfsFile.put("ext", suffix); gfsFile.put("mid", mid); gfsFile.setFilename(mid+"_"+fName); gfsFile.save(); return gfsFile; } /** * Save file * @param file * @return * @throws IOException */ public static GridFSInputFile saveBinaryForUser(File file, String aid) throws IOException { GridFS gfs = new GridFS(MorphiaQuery.ds().getDB(),USER_IMAGE); GridFSInputFile gfsFile = gfs.createFile(file); String fName = file.getName(); String suffix = fName.replaceFirst("^.*\\.", "."); gfsFile.setContentType(ContentType.get(suffix)); gfsFile.put("ext", suffix); gfsFile.put("accountId", aid); gfsFile.setFilename(fName); gfsFile.save(); return gfsFile; } /** * Save file * @param file * @return * @throws IOException */ public static GridFSInputFile saveBinaryForShare(File file, String aid) throws IOException { GridFS gfs = new GridFS(MorphiaQuery.ds().getDB(),SHARE_IMAGE); GridFSInputFile gfsFile = gfs.createFile(file); String fName = file.getName(); String suffix = fName.replaceFirst("^.*\\.", "."); gfsFile.setContentType(ContentType.get(suffix)); gfsFile.put("ext", suffix); gfsFile.put("accountId", aid); gfsFile.setFilename(System.currentTimeMillis()+fName); gfsFile.save(); return gfsFile; } /** * Save file for activity * @param file * @return * @throws IOException */ public static GridFSInputFile saveBinaryForActivity(File file, String activityId) throws IOException { GridFS gfs = new GridFS(MorphiaQuery.ds().getDB(),ACTIVITY_IMAGE); GridFSInputFile gfsFile = gfs.createFile(file); String fName = file.getName(); String suffix = fName.replaceFirst("^.*\\.", "."); gfsFile.setContentType(ContentType.get(suffix)); gfsFile.put("ext", suffix); gfsFile.put("activityId", activityId); gfsFile.setFilename(fName); gfsFile.save(); return gfsFile; } /** * find file by file name * @param fileName */ public static void find(String fileName) { GridFSDBFile gfsFile = findOne(fileName); if (gfsFile.getContentType() == null) { response.contentType = ""; } else { response.contentType = gfsFile.getContentType(); } renderBinary(gfsFile.getInputStream(), gfsFile.getFilename()); } private static GridFSDBFile findOne(String fileName) { GridFSDBFile rtn = null; try { rtn = UploadController.findBinary(fileName); } catch (IOException e) { e.printStackTrace(); } return rtn; } public static GridFSDBFile findBinary(String fileName) throws IOException { GridFS gfs = new GridFS(MorphiaQuery.ds().getDB(), MERCHANT_IMAGE); GridFSDBFile file = gfs.findOne(fileName); return file; } public static List<GridFSDBFile> findBinaryByMid(String mid) throws IOException { GridFS gfs = new GridFS(MorphiaQuery.ds().getDB(), MERCHANT_IMAGE); List<GridFSDBFile> files = gfs.find("mid="+mid); return files; } /** * find file by file name for mobile user * @param fileName * @param type */ public static void findImage(String fileName) { GridFSDBFile gfsFile = findOne(fileName, USER_IMAGE); if (gfsFile.getContentType() == null) { response.contentType = ""; } else { response.contentType = gfsFile.getContentType(); } renderBinary(gfsFile.getInputStream(), gfsFile.getFilename()); } /** * find file by file name for share * @param fileName * @param type */ public static void findImageForShare(String fileName) { GridFSDBFile gfsFile = findOne(fileName, SHARE_IMAGE); if (gfsFile.getContentType() == null) { response.contentType = ""; } else { response.contentType = gfsFile.getContentType(); } renderBinary(gfsFile.getInputStream(), gfsFile.getFilename()); } /** * find file by file name for activity * @param fileName * @param type */ public static void findImageForActivity(String fileName) { GridFSDBFile gfsFile = findOne(fileName, ACTIVITY_IMAGE); if (gfsFile.getContentType() == null) { response.contentType = ""; } else { response.contentType = gfsFile.getContentType(); } renderBinary(gfsFile.getInputStream(), gfsFile.getFilename()); } private static GridFSDBFile findOne(String fileName, String type) { GridFSDBFile rtn = null; try { rtn = UploadController.findBinary(fileName,type); } catch (IOException e) { e.printStackTrace(); } return rtn; } public static GridFSDBFile findBinary(String fileName, String type) throws IOException { GridFS gfs = new GridFS(MorphiaQuery.ds().getDB(), type); GridFSDBFile file = gfs.findOne(fileName); return file; } }