JAVA实现图片下载至缓存处理后,再上传FTP

例子跟上一例差不多,不过,它都在内存中进行操作,不将图片保存至本地,也就是没有文件的保存操作。

这样可以大大提高程序的运行效率:

程序运行时间: 9651ms

下面是运行的关键代码,相当于对之前的代码进行重构,主要是性能方面,还有代码规范等。

代码如下所示:

	// 获取开始时间
		long startTime = System.currentTimeMillis();
		
		// 在线图片地址1:
		String sourceFilePath = "http://m1.img.libdd.com/farm4/2012/0919/14/BBCD755A1FB52703E9207D150178EB1DEC649C75FC09_500_313.jpg";

		// 在线图片地址2:
		String sourceFilePath2 = "http://m2.img.libdd.com/farm5/2012/0914/11/BB0C1C675286CF6D30A23F5C96EB07FDA5D0FE05049E_314_460.JPEG";

		// 组装HTML代码片段
		// String destImgPath = ParseImgUtils.constructHtmlCode(sourceFilePath);
		List<ImageUrl> imageUrlList = ParseImgUtils.constructImageCode(sourceFilePath,
				sourceFilePath2);

		for (int i = 0; i < imageUrlList.size(); i++) {

			// 文件名
			String tempFilename = "E:\\ftpPath\\Snap48.jpg";

			// 下载至本地
			// try {
			// URLConnectionDownloader.downloadToNative(imageUrlList.get(i).getSourceFilePath(),
			// tempFilename);
			// } catch (Exception e) {
			// e.printStackTrace();
			// }

			// 按指定长度,宽度缩放图片大小
			JPGTransformer jpgTransformer = new JPGTransformer();
			String tempFilename2 = "E:\\ftpPath\\Snap48_new.jpg";

			// 申明并初始化输出流
			OutputStream fout = null;
			try {
				fout = URLConnectionDownloader.downloadToMemory(imageUrlList.get(i)
						.getSourceFilePath());
			} catch (Exception e2) {
				e2.printStackTrace();
			}

			try {
				// 注意:真正上传的是缩放后的文件
				// jpgTransformer.transform2(tempFilename, tempFilename2, 300,
				// 200);
				jpgTransformer.transform3(imageUrlList.get(i).getSourceFilePath(), fout, 300, 200);

			} catch (Exception e1) {
				e1.printStackTrace();
			}

			// 在這里添加水印效果
			MarkPicture.pressText("中科院軟件所", tempFilename2, "宋体", 1, 1, 25, 5, 5);

			// 延时1秒以执行之后的操作
			try {
				Thread.currentThread();
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			// 上传至FTP地址
			FtpUpload ftpUpload = new FtpUpload("*************", "***", "******************");
			File file = new File(tempFilename2);

			String destFileName = file.getName();
			// String FileName = s.subString(lastIndexOf("\"),
			// FullFileName.length);

			// String fileString2 =
			// filename.substring(filename.lastIndexOf("\\") + 1,
			// filename.length() );

			// 通過時間生成隨機不重復的文件名
			destFileName = RandomFileName.createFileNameByDate() + ".jpg";
			// destFileName = RandomFileName.uuidFileName();

			// 输入流定义
			InputStream in = null;
			try {
				in = new FileInputStream(file);
			} catch (FileNotFoundException ex) {
				ex.printStackTrace();
			}

			// 設置上傳的FTP目錄
			String ftpPath = "download";

			// 设定文件名和目录
			if (ftpUpload.upMyFile(destFileName, in, ftpPath) == true) {
				System.out.println("图片文件上传至FTP服务器已成功! ");
				// 设定反馈信息

				// 文件上傳成功了后,記得將上傳的文件同之前的原始數據聯系起來
				String destFilePath = ftpUpload.getFtpFilePath(ftpPath, destFileName);

				// soureFilePath同destFilePath聯系起來,具體使用算法,我這里只做簡單的關聯(用map鍵值對),后面可以用數據庫方式,文件存儲方式,內存方式
				Map<String, String> relateMap = new TreeMap<String, String>();
				relateMap.put(sourceFilePath, destFilePath);

				// 设置ftp图片路径
				imageUrlList.get(i).setDestFilePath(destFilePath);

				// 设置一个别识码,全球唯一
				imageUrlList.get(i).setFlag(destFileName);

				// 将数据存入数据库
				DBConn db = new DBConn();
				db.saveToDb(imageUrlList.get(i));

			} else {
				System.out.println("图片文件上传至FTP服务器失敗,請重試或聯系管理員! ");
			}

		
		}
		
		 //获取结束时间
		long endTime=System.currentTimeMillis();
		
		System.out.println("程序运行时间: "+(endTime - startTime)+"ms");


运行效果截图如下所示:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中的ConcurrentHashMap是一种线程安全的哈希表实现,它可以用于在多线程环境下实现缓存功能。 实现使用ConcurrentHashMap做缓存的步骤如下: 1. 引入ConcurrentHashMap类:首先,在Java程序中引入java.util.concurrent.ConcurrentHashMap类。 2. 创建ConcurrentHashMap对象:使用ConcurrentHashMap的构造函数创建一个ConcurrentHashMap对象,用于存储缓存数据。 3. 添加数据到缓存:通过put()方法将数据添加到ConcurrentHashMap对象中,使用一个唯一的键作为缓存数据的标识。 4. 从缓存中获取数据:通过get()方法从ConcurrentHashMap对象中获取缓存数据,根据唯一键来获取数据。 5. 删除缓存数据:通过remove()方法删除ConcurrentHashMap对象中的缓存数据,根据唯一键来删除数据。 使用ConcurrentHashMap做缓存的好处是它是线程安全的,多个线程可以同时访问和修改缓存数据而不会造成数据不一致的问题。它内部使用了锁分段技术,将整个数据结构分为多个段,每个段对应一个锁,不同的线程可以同时访问不同的段,从而提高了并发性能。 由于ConcurrentHashMap是线程安全的,使用它做缓存可以有效地提高系统的并发性能和响应速度。同时,ConcurrentHashMap的查询和修改操作都是非阻塞的,不会影响其他线程对缓存数据的访问,从而提高了系统的整体性能。 总之,使用ConcurrentHashMap实现缓存可以有效地提高系统的并发性能和响应速度,同时保证数据的一致性和线程安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值