热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Struts中的一个简单上传图片操作

2019独角兽企业重金招聘Python工程师标准ActionMessagesmsgsnewActionMessages();TestUploadFormupForm(Test

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

ActionMessages msgs = new ActionMessages();
 TestUploadForm upForm = (TestUploadForm)form;
 String  fileName = upForm.getPhoto().getFileName();//获取上传文件名称
 int fileByteSize = upForm.getPhoto().getFileSize();//获取上传文件大小 -Byte
 
 if(fileByteSize > BYTE_SIZE){//验证图片大小
  msgs.add("photoSize", new ActionMessage("error.photo_size_empty"));
  saveMessages(request, msgs);
  return new ActionForward("/html/circle/album_add.vm?sid="+clForm.getSid(),false);
 }
 
 String fn = fileName.substring(fileName.lastIndexOf("."));
 if( fn.equalsIgnoreCase(".jpg") || fn.equalsIgnoreCase(".gif")){//验证图片格式
  Calendar calendar = new GregorianCalendar();
  Date trialTime = new Date();
  calendar.setTime(trialTime);
  //使用当前时间创建保存图片的文件夹
  String timePath = calendar.get(Calendar.YEAR)+"\\"+(calendar.get(Calendar.MONTH)+1)+"\\"+calendar.get(Calendar.DAY_OF_MONTH);
  File uploadPath = new File(this.getServlet().getServletContext().getRealPath("uploads")+"\\photo\\"+timePath);
  if(!uploadPath.exists())uploadPath.mkdirs();//如果文件夹不存在 创建文件夹
  //设置存放图片的绝对地址
  File upliadFile = new File(this.getServlet().getServletContext().getRealPath("uploads")+"\\circlePhoto\\"+timePath+"\\"+fileName);
  BufferedOutputStream bos = null;
  BufferedInputStream bis = null;
  try {
   bis = new BufferedInputStream(upForm.getPhoto().getInputStream());
   Image img = javax.imageio.ImageIO.read(bis);
   int photoWidth  = img.getWidth(null);
   int photoHeight = img.getHeight(null);
   //图片规格 不符合规范...生成略缩图
   if (photoWidth > WIDTH || photoHeight > HEIGHT) {
    BufferedImage bi = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);
    bi.getGraphics().drawImage(img, 0, 0, WIDTH, HEIGHT, null);
    bos = new BufferedOutputStream(new FileOutputStream(upliadFile));
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
    encoder.encode(bi);
   } else {//包存原有图片大小
    BufferedImage bi = new BufferedImage(photoWidth, photoHeight,BufferedImage.TYPE_INT_RGB);
    bi.getGraphics().drawImage(img, 0, 0, photoWidth, photoHeight, null);
    bos = new BufferedOutputStream(new FileOutputStream(upliadFile));
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
    encoder.encode(bi);
   }
   String path = (timePath+"\\"+fileName).replace("\\","/");
   
   /**
    * 最后向数据库中保存 图片地址
    **/
   
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if (bis != null)bis.close();
    if (bos != null)bos.close();
   }catch(IOException e) {
    e.printStackTrace();
   }
  }
 }else{
  //格式不正确
  msgs.add("photoType", new ActionMessage("error.photo_type_empty"));
  saveMessages(request, msgs);
  return new ActionForward("/html/circle/album_add.vm?sid="+clForm.getSid(),false);
 }

 

第一次自己写上传操作.由很多不足的地方希望大家多多指教


原文链接: http://www.dlog.cn/nicholascoder/diary/8597

转:https://my.oschina.net/moroseyu/blog/51463



推荐阅读
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
aghcgo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有