项目中图片处理总结

项目中图片处理总结

项目中的图片处理方案:
1、 将图片保存到项目中的image文件夹底下(这是最初的设计,当时考虑这样页面获取图片比较简单)
2、 将图片保存的物理磁盘上,相对于项目路径(将第一种方案改为第二种方案的原因是考虑到包替换的时候会把原来的图片替换掉。版本升级和包替换都不方便)
3、 将图片保存到物理磁盘、固定盘符、固定文件夹底下(将第二总方案改为第三中方案的原因是考虑到双机,必须把图片保存到共享磁盘上)
4、将图片保存到数据库(没使用这总方法,原因是这总方法的占用数据库的空间,读取的时候也有性能问题)
5、将图片保存到图片服务器(可惜本项目没有图片服务器)

下面保存图片


//先保存图片到服务器 
if (imageBean.getImageFile() != null && imageBean.getImageFile().length() > 0)
{
//得到图片名称
String imageName = imageBean.getImageFileFileName();
File file = imageBean.getImageFile();
//获取图片后缀
String ext = imageName.substring(imageName.lastIndexOf('.') + 1).toLowerCase(Locale.CHINA);
//重新生成文件名
String filename = UUID.randomUUID().toString() + "." + ext;//构建文件名称
//构建文件保存的目录 这是方案一的实现
//String pathdir = "/images/room/prototype";
//得到图片保存目录的真实路径 这是方案二的实现
//String realpathdir = new File(suiteImagePath).getCanonicalFile().getPath();
//String realpathdir = ServletActionContext.getServletContext().getRealPath(pathdir);
//FileTools.saveFile(file, realpathdir, filename);
//这个方法是保存文件到对应的路径
FileTools.saveFile(file, suiteImagePath, filename);
imageBean.setName(filename);
imageBean.setPullpath(suiteImagePath + "/" + filename);
}
//保存图片到数据库
int id = imageDAO.addImage(imageBean);
imageBean.setId(id);
return imageBean;


struts2具体如何上传文件这就不多说了、 保存图片就这么解决了。

接下来看下页面如何获取图片


<img src="../showImage.action?imagePath=${imageBean.pullpath}" />
后台的处理是

        InputStream file = null;
        OutputStream toClient = null;
        try
        {
            //imagePath = new File(imagePath).getCanonicalFile().getPath();
            file = new FileInputStream(new File(imagePath));
            //int i = file.available(); // 得到文件大小
            byte data[] = new byte[KeyConstant.DEFAULT_BYTE_SIZE];
            int endFlag = 0;
            ServletActionContext.getResponse().setContentType("image/*"); // 设置返回的文件类型
            toClient = ServletActionContext.getResponse().getOutputStream(); // 得到向客户端输出二进制数据的对象
            while (endFlag != -1)
            {
                endFlag = file.read(data);
                if (endFlag == -1)
                {
                    break;
                }
                toClient.write(data, 0, endFlag); // 输出数据
            }
            toClient.flush();
            toClient.close();
        }
...后面是处理异常和关闭流


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请将后戳名改成.rar然后解压,然后将其导入项目里,注释:必须为shh方案的javaweb 项目 <!-- fck编辑器 --> <servlet> <servlet-name>SimpleUploader</servlet-name> <servlet-class> com.fredck.FCKeditor.uploader.SimpleUploaderServlet </servlet-class> <init-param> <!-- 此参数用于设置文件上传路径 --> <param-name>baseDir</param-name> <param-value>/UserFiles/</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <!-- 此参数用于设置是否开启上传功能 --> <param-name>enabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>AllowedExtensionsFile</param-name> <param-value></param-value> </init-param> <init-param> <!-- 此参数用于设置禁止上传的文件类型 --> <param-name>DeniedExtensionsFile</param-name> <param-value> php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi </param-value> </init-param> <init-param> <param-name>AllowedExtensionsImage</param-name> <param-value>jpg|gif|jpeg|png|bmp</param-value> </init-param> <init-param> <param-name>DeniedExtensionsImage</param-name> <param-value></param-value> </init-param> <init-param> <param-name>AllowedExtensionsFlash</param-name> <param-value>swf|fla</param-value> </init-param> <init-param> <param-name>DeniedExtensionsFlash</param-name> <param-value></param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>Connector</servlet-name> <servlet-class> com.fredck.FCKeditor.connector.ConnectorServlet </servlet-class> <init-param> <param-name>baseDir</param-name> <param-value>/UserFiles/</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- fck编辑器 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值