Java模拟post实现图片上传

    public class Post {
         public static String readFileAsString(String fileName) throws Exception {  
        FileInputStream fis = new FileInputStream(fileName);  
        BufferedInputStream in = new BufferedInputStream(fis);  
        byte buffer[] = new byte[256];  
        StringBuffer picStr=new StringBuffer();  
        BASE64Encoder base64=new BASE64Encoder();  
        while (in.read(buffer)>= 0){  
            picStr.append(base64.encode(buffer));//进行64位编码  
        }  
    fis.close();  
    fis=null;  
    in.close();  
    in=null;  
    buffer=null;  
    return picStr.toString();  
}  

public static void main(String[] a) {     
    try {  
        File file=new File("G:\\图片\\loopwallpaper\\137.jpg");  
        //将文件读成字符串  
        String picString=readFileAsString(file.toString());  
        //URLEncode  
        picString="&uname=yc&pwd=a&picdata="+URLEncoder.encode(picString, "UTF-8");

        // form域的数据.form域的数据必须以链接形式发送 
        InetAddress addr = InetAddress.getByName("218.196.14.220"); 

        // 建立连接 
        Socket socket =new Socket(addr,8080);

        String url="/JavaHttp/loginServlet.do"; 

        // 创建数据提交数据流 
        DataOutputStream dos=new DataOutputStream(socket.getOutputStream());     
        String message="POST "+url+" HTTP/1.1\r\n"
            +"Host:localhost \r\n"   
            +"Cache-Control:no-cache \r\n" +"User-Agent: MSIE6.0; \r\n"  
            +"Content-Type:application/x-www-form-urlencoded \r\n"   
            +"Content-Length: "+picString.length()+" \r\n\r\n" //报头以两个\n作为结束标志  
            +"Connection:Close \r\n\r\n";
            //+"Connection: Keep-Alive \r\n\r\n";

        message+=picString;

        byte buffer[]=message.getBytes();     
        dos.write(buffer);  
        dos.flush();  



        // 创建web服务器响应的数据流 
        BufferedReader httpResponse = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8")); 
        String lineStr = ""; 
        while ((lineStr = httpResponse.readLine()) != null) { 
            System.out.println(lineStr); 
        }

        dos.close();  
        socket.close(); 

    } catch (Exception e) {  
        e.printStackTrace();  
    } 
}     

}

public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response); 
}


public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("uname: "+request.getParameter("uname"));
    System.out.println("pwd: "+request.getParameter("pwd"));

    String picdata=request.getParameter("picdata");
    BASE64Decoder base64=new BASE64Decoder();  
    //64位解码  
    byte[] buffer=base64.decodeBuffer(picdata); 

    //写进文件  
    FileOutputStream fos=new FileOutputStream("D:\\photo.jpg");  
    fos.write(buffer);  
    fos.flush();  
    fos.close();  
    fos=null;  
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值