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
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值