zoukankan      html  css  js  c++  java
  • jsp+iframe+serverlet实现文件上传

    实现文件上传我想大家也都会

    这是jsp页面的代码

    index.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    <table>
    <tr>
    <td colspan="2" align="center">
    商品添加
    </td>
    </tr>
    <tr>
    <td>
    <form action="Iframe.jsp" target="My_Iframe" method="post">
    名称:&nbsp;<input  name="gname"/><br /><br />
    类别:&nbsp;<input name="gtype"/><br /><br />
    价格:&nbsp;<input name="gprice"/><br /><br />
    数量:&nbsp;<input name="gnumber"/><br /><br />
    照片:&nbsp;<input id="photo" name="gphoto"/><br /><br />
    
    
    </td>
    <td >
    <iframe name="My_Iframe" src="Iframe.jsp?filename=1407170231464.jpg" style="height:180px">
    </iframe>
    </td>
    </tr>
    <tr>
    <td colspan="2">
    描述:&nbsp;<textarea style="450px" cols="30" rows="5"></textarea>    
    </td>
    </tr>
    </table>
    </form>
    </body>
    
    </html>

    这是iframe框架所引用的界面

    Iframe.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <%
       String path = request.getContextPath();
       String filename = request.getParameter("filename");
       String image = path+"/"+filename;
       
     //  if(image==null||image=="")
    //   {
    //       image=path+"/"+"1407170231464.jpg";
     //  }
       
       System.out.print(image);
    %>
    <body onload="returnParent()">
    <img   src="<%=image %>" width="100px" height="100px"/>
    <input id="image1" value="<%=filename %>" type="hidden"/>
    <form action="image" method="post"   enctype="multipart/form-data">
        <input type="file" name="goodsImage" />
        <input type="submit" value="上传" />
    </form>
    <script type="text/javascript">
    function returnParent() {
        var frameValue = document.getElementById("image1").value;
        //window表示当前的页面
        //window.parent表示获取到父窗体
        window.parent.document.getElementById("photo").value = frameValue;
    }
    </script>
    </body>
    </html>

    这里学到了新知识就是将iframe窗体中的某个元素的值赋给父窗体

     var frameValue = document.getElementById("image1").value;
        //window表示当前的页面
        //window.parent表示获取到父窗体
        window.parent.document.getElementById("photo").value = frameValue;

    下面的这个是iframe内点击上传时 anction所对应的Serverlet代码
    imageservlets.java

    package com.shxt.lesson16homework.Servlets;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.fileupload.FileItemIterator;
    import org.apache.commons.fileupload.FileItemStream;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    
    public class imageservlets extends HttpServlet {
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            try{
               
                
                DiskFileItemFactory factory = new DiskFileItemFactory();
                 
                 ServletFileUpload upload = new ServletFileUpload(factory);
                 
                 FileItemIterator iter = upload.getItemIterator(request);
                 FileItemStream stream = iter.next();        //获取到文件(流默认是闭合的)
                InputStream input = stream.openStream();    //openStream方法将流打开,转化为标准的InputStream(字节流)
    //            File f = new File(input);
    //            FileInputStream fs = new FileInputStream(input);
    //            String filename=stream.getName();
    //            
    //             String kzm = filename.substring(filename.length()-4);
                 //文件名称
                 String tomcatPath = request.getSession().getServletContext().getRealPath("/");
                 String imgname= new java.util.Date().getTime()+".jpg";
                 String newfilename =tomcatPath+"/"+ imgname;
                 File file = new File(newfilename);
                 FileOutputStream output = new FileOutputStream(file);
                byte[] buffer = new byte[1024];    //字节数组类型的缓冲区
    
                while (true) {
                    //输入流input指向源,从源中读取数据,暂时存储在buffer中
                    int count1 = input.read(buffer);
                    System.out.println(count1);
                    if (count1 == -1) {
                        break;
                    }
                    //输出流output指向目标,向目标写入数据,数据从buffer中获取
                    output.write(buffer, 0, count1);
                    
                }
                
                //System.out.print(kzm);
                response.sendRedirect("Iframe.jsp?filename="+imgname);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    
    }

    Serverlet处理上传文件时引入了3个包
    commons-fileupload-1.2.2.jar  commons-io-2.0.1.jar  commons-logging.jar

  • 相关阅读:
    BPM实例方案分享:表单子表自动填入数据
    H3 BPM循环子表相关方法介绍
    H3 BPM前后台交互方法介绍
    Web Service Adapter简介:
    H3 BPM钉钉接入配置
    H3 BPM 跨平台表单发起详解
    H3 BPM门户操作说明及实例介绍
    H3 BPM报销流程开发示例
    Photon Cloud Networking: OnPhotonSerializeView Not Firing
    unity 事件顺序及功能说明
  • 原文地址:https://www.cnblogs.com/Small-Life/p/3892956.html
Copyright © 2011-2022 走看看