请教各位 
服务器有一个servlet接收post请求post中 存在 文本字段 还有一个 图片的二进制流我想问一下  正常的接收字段request.getParameter("");
那如果跟二进制流一起 post过来 该如何处理 谢谢啦

解决方案 »

  1.   

    不知道对你有没有用。
     ServletInputStream in = request.getInputStream();
            byte[] buf = new byte[4048];
            int len = in.readLine(buf, 0, buf.length); // 取出第一行
            String f = new String(buf, 0, len - 1); 
            while ((len = in.readLine(buf, 0, buf.length)) != -1) {
      

  2.   

    你的图片应该是上传的时候,通过你所使用的组件来传递到后台,表单要设置enctype=multipart/form-data
      

  3.   

    现在是一个接口
    我这边是一个servlet 
    那边需要一起传递多个数据过来 文本的字段  和 一个图片
    所以不知道如何做
      

  4.   

    上传组件包含了一套专用的数据接收API
    楼主可以使用上传组件的Request来接收数据!而不是httpServletReuqest 来做!
    说明书:
        SmartUpload对象的getRequest()方法获取com.jspsmart.upload.Request对象,通过该对象获取表单中的其他信息!
       这个对象提供了采用的方法:getParameter(String name)
                            getParameterValues(String name)你试试吧!
      

  5.   

    用apache的fileuploadhttp://my.oschina.net/u/211822/blog/41163
      

  6.   

    远程接受吗?
    ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
                //封装用于接收的对象输入流
    InputStream in = (InputStream)request.getInputStream();
    //byte[] data = InputStreamUtils.InputStreamTOByte(in);

    //ObjectInputStream obj = new ObjectInputStream(InputStreamUtils.byteTOInputStream(data));

    ObjectInputStream oo = new ObjectInputStream(in);

    Object model = oo.readObject();

    //Object model = obj.readObject();

    Message msg=(Message)model;
    试试
      

  7.   

    Client端代码
    package com.socket;
     
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.PrintWriter;
    import java.net.Socket;
     
    import javax.imageio.ImageIO;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class ImgClient01 extends JFrame {
        JButton button;
        JPanel panel;
        int count = 0;
        BufferedImage image;
     
        public ImgClient01() {
            setSize(300, 400);
            button = new JButton("获取图像");
            add(button, BorderLayout.NORTH);
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    try {
                        Socket s = new Socket("localhost", 8889);
                        PrintWriter out = new PrintWriter(s.getOutputStream());
                        out.print("a");
                        DataInputStream in = new DataInputStream(s.getInputStream());
                        byte[] b = new byte[1024];
                        ByteArrayOutputStream bout = new ByteArrayOutputStream();
                        int length = 0;
                        while ((length = in.read(b)) != -1) {
                            bout.write(b, 0, length);
                        }
                        ByteArrayInputStream bin = new ByteArrayInputStream(bout
                                .toByteArray());
                        image = ImageIO.read(bin);
                        repaint();
                        ImageIO.write(image, "gif", new File("output-" + count
                                + ".gif"));
                        count++;
                        s.close();
                    } catch (Exception e) {
                    }
                }
            });
            panel = new JPanel();
            add(panel);
        }
     
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            g.drawImage(image, 20, 20, 300, 150, null);// image为BufferedImage类型
        }
     
        public static void main(String[] args) throws Exception {
            ImgClient01 frame = new ImgClient01();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
     
    }Server端代码
    package com.socket;
     
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    import javax.imageio.ImageIO;
     
    public class ImgServer01 {
     
        public static void main(String[] args) throws Exception {
            ServerSocket server = new ServerSocket(8889);
            System.out.println("服务器开启连接...端口为8889");
            Socket s = server.accept();
            while (true) {
                System.out.println("一客户端连接服务器,服务器传输图片...");
                DataOutputStream dout = new DataOutputStream(s.getOutputStream());
                BufferedImage image = ImageIO.read(new File("1.gif")); // 读取1.gif并传输
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                boolean flag = ImageIO.write(image, "gif", out);
                byte[] b = out.toByteArray();
                dout.write(b);
                s.close();
                System.out.println("图片传送完毕,服务器开启连接...端口为8889");
                s = server.accept();
     
            }
        }
    }开两个工作空间 先运行service,在运行client,使用socket做的一个传输,但是图片转换的原理是一样的。下面这段代码 应该可以帮助到你,下面是取得一个file,你的应该是接受到的一个request请求,获取到他的inputstream流,在包装下,转换成byte数组。
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          InputStream inputStream = new BufferedInputStream(new FileInputStream(new File(defaultUrl)));
          
          try{
          byte[] ioBuffer = new byte[1024];
          int readLen = inputStream.read(ioBuffer);
          while (-1 != readLen) {
            baos.write(ioBuffer, 0, readLen);