Large file upload - salmanbaig8/imp GitHub Wiki

File convFile;

		//Check For OS UNIX/Windows, to create diff TMP path
		if (System.getProperty(OS_NAME).startsWith(WINDOWS)) {
			convFile = new File(file.getOriginalFilename());
			logger.info("OS is windows, getOriginalFilename: " + file.getOriginalFilename());
			convFile.createNewFile();
		    } else {
		    String tempPath = Util.propertiesLoad().getProperty(SERVER_PATH);
			convFile = new File(tempPath + file.getOriginalFilename());
			logger.info("UNIX Based system, getOriginalFilename: " + file.getOriginalFilename());
			convFile.createNewFile();
		    }
		logger.debug("convFile: " + convFile);
		if(file.getInputStream() instanceof ByteArrayInputStream)
		{
			logger.debug(apiName + " :File is not Channelled");
			try(FileOutputStream fos = new FileOutputStream(convFile);) {
				fos.write(file.getBytes());
				logger.info("convert method End");
				return convFile;
			}
		}
		else
		{   //Handling larger files for uploading to avoid JVM heap Space
			logger.debug(apiName + " :File is Channelled");
			try(FileOutputStream fos = new FileOutputStream(convFile);FileInputStream is =(FileInputStream) file.getInputStream();) {
				FileChannel iStreamChannel = is.getChannel();
                ByteBuffer bb = ByteBuffer.allocate(10000);
                FileChannel outChannel=fos.getChannel();
                 
                while(iStreamChannel.read(bb) >= 0){
                    bb.flip();
                    outChannel.write(bb);
                    bb.clear();
                }
                outChannel.close();
				logger.info(apiName + " :convert method End");
				return convFile;
			}
		}