`
jefferson
  • 浏览: 279193 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于图片上传处理(web) --笔记1

阅读更多

这些笔记都是实用的技术细节:

图片处理流程,无外乎几个步骤

1、web上传图片

2、服务端接收图片

3、服务端处理图片

4、保存图片

上传图片:

一句话:设置form的属性enctype为multipart/form-data

在HTML中,使用表单Form主要是用来向服务器提交数据,格式如下:
<FORM ACTION="URL"
METHOD="GET|POST"
ENCTYPE="…" TARGET="...">
. . .
</FORM>
enctype指定了表单提交给服务器时的内容形式(Content-Type),默认值是"application/x-www-form-urlencoded",这时,表单信息一般采用URL编码制。
但是,当向服务器传送图片或文件这样包含非ASCII字符或二进制数的数据时,根据RFC1867规定,就必须使用“multipart/form-data”内容类型。
其实无论是默认表单信息,还是图片文件,这些内容都是装载在HTTP协议的正文内容部分,都可以看成HTTP协议携带的对象,只是两种正文内容形式不一样。前者是String字符串类型,而后者则是一个通用的数据对象类型(Object)。在以后章节中将专门讨论HTTP协议装载数据对象的底层细节。
使用“multipart/form-data”上传文件的格式写法如下:
<FORM ACTION="URL" METHOD="GET|POST" ENCTYPE=" multipart/form-data ">
 
</FORM>
文件通过HTTP协议传送到服务器端后,需要在服务器端对该文件进行专门的接受。HttpServletRequest没有提供直接获取文件数据的方法,因此需要开发专门的服务器文件处理组件。
目前有两种上传文件处理组件:一种是基于完全JSP结构的,使用JSP来处理上传的文件,以SmartUpload(http://www.jspsmart.com)最常用;还有一种是完全的JavaBeans组件:Cos文件上传组件包(http://www.servlets.com/cos/index.html),Cos可以使用在JSP中,也可以使用在Servlet或Servlet Filter中。
由于在实际应用中,文件上传功能往往和其他正常表单参数一起混合使用,而不是独立使用的。因此,可以设定一个Servlet专门用来处理这类混合表单的请求,在将文件接受处理后,自动导向到处理表单正常参数的JSP/Servlet去处理。
表单调用示例如下:
     method="post" enctype="multipart/form-data">
    
  
  
  
  
  
在这个表单中,既有文件提交,也有username这样正常的参数需要提交,提交的Servlet名为multipartformserv。
接收图片:
当然是在servlet处理,这里借助类com.oreilly.servlet.MultipartRequest:

mrequest

Hashtable hashtable=

 

Enumeration e=

 

String imgname=(String)e.nextElement();

String imgfile=

 

hashtable.put(imgname,imgfile);

 

 

}

}

 

}

这样,把图片名称的映射放置于一个hashtable中

 

new Hashtable();mrequest.getFileNames();while (e.hasMoreElements()) {mrequest.getFilesystemName(imgname);if (imgfile!=null){// System.out.println(imgname+"="+imgfile);return hashtable;=new MultipartRequest(request,uploaddir,size * 1024);
其他继续
分享到:
评论
1 楼 jefferson 2006-11-20  
缩放处理有两种方式:是在HTML显示时,使用image 语法的width和height来限制大小,但是这样做只是解决了表面问题,无法解决大字节图片传送到客户端带来的性能影响,这个图片因为是用户发言的头像,将会在每个帖子里面显示。如果头像都是巨大图片,对帖子显示速度的影响是很大,因此必须在服务器端进行缩小后,再传送到客户端,这样提高了论坛系统性能。

服务器端的图形处理需要使用到Java的图形处理技术,而且图形处理是在服务器端的Web容器中进行的。和以往Java在客户端进行图形处理稍微有所不同,相同的是都要使用计算机的底层图形支持资源。

J2SE 1.4提供新的增强的图形处理功能,JDK1.4中最新的javax.imageio.ImageIO对图片进行读写操作,而使用java.awt.geom.AffineTransform对图片进行尺寸缩放处理。

import java.io.File;

import java.awt.image.BufferedImage;

import java.awt.Image;

import java.awt.image.AffineTransformOp;

import javax.imageio.ImageIO;

import java.awt.geom.AffineTransform;



public class UploadImg{

     /**

     * 参数设置

     * @param fromdir 图片的原始目录

     * @param todir 处理后的图片存放目录

     * @param imgfile 原始图片

     * @param sysimgfile 处理后的图片文件名前缀

     */

           public void init(String fromdir,String todir,String imgfile,String sysimgfile)

           {

                  this.fromdir=fromdir;

                  this.todir=todir;

                  this.imgfile=imgfile;

                  this.sysimgfile=sysimgfile;

             }

    …

    public boolean CreateThumbnail() throws Exception

    {

        //ext是图片的格式 gif、JPG 或png

        String ext=""

        double Ratio=0.0;

        File oldFile = new File(fromdir,imgfile);

        if (!F.isFile())  //检查是否存在此图片文件

             throw new Exception(F+" is not image file error in CreateThumbnail!");



         //首先判断上传的图片是gif还是JPG ImageIO,只能将gif转换为png

         if (isJpg(imgfile)){

            ext="jpg";

        }else{

           ext="png";

        }

        File newFile = new File(todir,sysimgfile+"."+ext);



        BufferedImage Bi = ImageIO.read(oldFile);  //读取原始图片

        if ((Bi.getHeight()>120) || (Bi.getWidth()>120)){

            if (Bi.getHeight()>Bi.getWidth())

              Ratio = 120.0/Bi.getHeight();

            else

              Ratio = 120.0/Bi.getWidth();

       }

       //进行图片转换

       AffineTransformOp op =

          new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);

       Image itemp = op.filter(Bi, null);



       try { //写入转换后的图片

           ImageIO.write((BufferedImage) itemp, ext, newFile);

       }catch (Exception ex) {

            throw new Exception(ex.getMessage());

       }

       return (true);

   }

}

该类中由于使用到了Java 的AWT,虽然没有实际显示,但Linux系统下需要X11 Windows的支持(安装Linux时需安装 XFree86,Linux完全安装方式包括安装XFree86)。

该缩放功能是在图片上传到服务器后再进行的处理,可以对JPG进行缩小放大;对上传是GIF的图片,缩放后变成PNG图片格式文件。

相关推荐

    web前端基础学习笔记

    ### Web前端基础学习笔记 #### 一、HTML ##### 1. HTML简介 - **网站与网页**: 网页是使用HTML标记语言编写的文件,用于描述同一范畴内的信息或数据。多个网页组成一个网站。 - **HTML**: 超文本标记语言,是一种...

    python-Web 笔记

    ### Python Web 开发基础知识点详解 #### 一、Python Web 开发概述 Python 是一种广泛应用于 Web 开发的编程语言,其简洁性、易读性和强大的功能使其成为开发 Web 应用程序的理想选择之一。本章节主要介绍如何使用...

    TensorFlow2-keras-Vue开发笔记

    例如,用户可以上传图片,Vue组件将图片数据预处理后传递给后端的TensorFlow模型进行预测,然后将预测结果展示给用户。 为了整合TensorFlow 2、Keras和Vue.js,你需要设置一个前后端分离的架构。后端通常由Python...

    php图片系统 XD-picCMS图片系统

    - **上传**:系统需要支持多种格式的图片上传,通常会进行文件类型的检查,防止非法文件上传。 - **存储**:图片存储一般采用云存储或本地存储,可能涉及图片的重命名、缩略图生成等操作。 - **分类**:通过分类...

    web网站文件包含漏洞和攻击-运维安全详细笔记总结

    web 网站文件包含漏洞和攻击-运维安全详细笔记总结 文件包含漏洞是指攻击者通过上传恶意文件,利用服务器的文件包含功能来执行恶意代码,从而获取服务器的控制权。文件包含漏洞可以分为本地文件包含漏洞和远程文件...

    Node.js-萌音云笔记-一个高效的在线云笔记专注技术文档在线创作阅读分享和托管

    在线云笔记可能包含文件上传功能,如图片、PDF或其他附件。Node.js配合Multer或Busboy等库可以处理文件上传,而存储则可以使用云存储服务如Amazon S3或Google Cloud Storage,也可以在本地或NAS设备上搭建文件存储。...

    JAVA_web开发笔记

    ### JAVA Web 开发笔记 #### 一、HTML基础 ##### 1.1 什么是HTML? HTML,全称为HyperText Markup Language(超文本标记语言),是一种用于创建网页的标准标记语言。HTML文档是由一系列的标签组成的,这些标签...

    Java web servlet笔记

    文件上传通常涉及到表单的POST请求,服务器端通过`HttpServletRequest`的`getPart()`或`getParts()`方法来获取上传的文件。 生成随机验证码通常结合`HttpServletResponse`的`getOutputStream()`或`getWriter()`,...

    Web程序设计课堂笔记.doc

    **文件上传和下载**:在Web程序设计中,用户可能需要上传文件(如图片、文档等),或从服务器下载文件。这通常涉及到表单提交、文件流处理和错误处理等技术。\n\n10. **JSP的MVC设计架构**:MVC(Model-View-...

    jx-ocr前端开发笔记

    【标题】"jx-ocr前端开发笔记"指的是一个关于jx_ocr项目的前端开发学习资料,这通常涉及到使用JavaScript、HTML、CSS等技术在Web环境中实现OCR(Optical Character Recognition,光学字符识别)功能。OCR是将图像中...

    编码实现图片上传.rar

    在这个场景下,"编码实现图片上传"是一个关键的功能点,它涉及到Web开发中的文件上传技术。下面将详细讨论这个主题。 首先,我们来看"课工厂新闻管理系统",这可能是一个教学平台或工具,用于教授如何开发一个新闻...

    java web 学习笔记,超详细好用.docx

    Java Web 学习笔记主要涉及了文件上传这一关键知识点,这是在开发Web应用程序时常见的功能,比如用户上传头像、图片或附件等。文件上传在HTML表单中通过特定的方式实现,包括以下几点: 1. **表单提交方式**:为了...

    Python 网络爬虫(Web Crawlers)学习笔记。.zip

    - **图片爬取**:抓取网页中的图片,存储到本地或上传到云存储。 - **新闻网站爬虫**:爬取新闻网站的文章标题、内容和发布时间,构建新闻数据库。 通过学习以上内容,你将能够构建自己的Python网络爬虫,从网页...

    springMVC笔记

    - 静态资源处理(default-servlet-handler):处理静态资源请求,保证静态资源如图片、CSS和JavaScript等能被正确处理。 - 注解驱动(annotation-driven):启用注解驱动的Spring MVC,使得能够使用@...

    Python Django Web 点餐项目课件、源代码、课堂笔记

    静态文件(如CSS、JavaScript和图片)通过`STATICFILES`配置进行管理,而用户上传的媒体文件(如订单照片)则使用`MEDIA_ROOT`和`MEDIA_URL`配置。 10. **数据库操作** Django使用ORM(对象关系映射)技术,简化...

    FCKeditor笔记和中文名图片显示

    这篇博客文章可能是关于如何在FCKeditor中处理中文文件名的图片显示问题,因为这在某些情况下可能会遇到一些挑战。 **FCKeditor基础知识** 1. **安装与集成**:FCKeditor可以通过下载官方发布的源码进行安装,然后...

    一个简单而漂亮的图片上传工具,由vue-cli-electron-builder构建.zip

    1. "说明.txt":通常包含关于项目的基本信息、使用指南或开发者笔记,可能包括如何运行、配置、部署以及可能遇到的问题和解决方案。 2. "PicGo_dev.zip":很可能包含了项目的源代码或开发版本,名字中的"Dev"通常...

    SpringMVC+mybatis+mysql的云笔记

    1. 文本、视频和图片笔记发布:系统需支持富文本编辑器,用户可以上传文本、图片和视频,这些内容通过Mybatis存入数据库。图片和视频可能需要额外的文件存储服务,如阿里云OSS或AWS S3,以保证大文件的稳定存储。 2....

    支持截图粘贴上传图片到七牛

    标题中的“支持截图粘贴上传图片到七牛”是指一种功能,它允许用户在使用VSCode(Visual Studio Code)编辑Markdown文件时,通过截图并直接粘贴的方式将图片上传到七牛云存储服务。七牛云是知名的云存储平台,为...

Global site tag (gtag.js) - Google Analytics