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

来源:互联网 发布:php在线加密平台源码 编辑:程序博客网 时间:2024/04/20 19:12

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

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

程序运行时间: 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");


运行效果截图如下所示:



原创粉丝点击