socket模仿HTTP发送图片到服务端

package javaBasic;


import java.io.BufferedInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.URLEncoder;
import java.util.Base64;




public class SocketHttp {
	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();
	    
	    Base64.Encoder base64 = Base64.getEncoder();
	    while (in.read(buffer)>= 0){
	        picStr.append(base64.encode(buffer));//进行64位编码
	    }
	    System.out.println(picStr);
	    fis.close();
	    fis=null;
	    in.close();
	    in=null;
	    buffer=null;
	    return picStr.toString();
	}

	 public static String GetImageStr()  
	    {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理  
	        String imgFile = "D://1.jpeg";//待处理的图片  
	        InputStream in = null;  
	        byte[] data = null;  
	        //读取图片字节数组  
	        try   
	        {  
	            in = new FileInputStream(new File(imgFile));          
	            data = new byte[in.available()];  
	            in.read(data);  
	            in.close();  
	        }   
	        catch (IOException e)   
	        {  
	            e.printStackTrace();  
	        }  
	        //对字节数组Base64编码  
	        Base64.Encoder base64 = Base64.getEncoder();
	       // Base64.Encoder  encoder = new Base64.Encoder ();  
	        return base64.encodeToString(data);//返回Base64编码过的字节数组字符串  
	    }  

	public static void main(String[] a) {   
	    try {
	        File file=new File("D:/1.jpeg");
	        //将文件读成字符串
	        String picString=GetImageStr();
	        //URLEncode
	        picString="myfile="+URLEncoder.encode(picString, "UTF-8");
	        String url="http://202.118.19.82:8080/upload?imgname=1.jpg";
	        Socket socket = new Socket();
            InetSocketAddress inetSocketAddress = new InetSocketAddress("202.118.19.82", 8080);
            socket.connect(inetSocketAddress, 1000);
	        DataOutputStream dos=new DataOutputStream(socket.getOutputStream());   
	        String message=""
	        +"POST "+"/upload"+" HTTP/1.1 \r\n "
	        +"Host: 202.118.19.82 \r\n "+"Accept: */* \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 "
	        +"Connection: Close   \r\n\r\n"//报头以两个\n作为结束标志
	        +picString+"\r\n ";//post数据  
	        System.out.println(message);
	        byte buffer[]=message.getBytes();   
	        dos.write(buffer);
	        dos.flush();
	        dos.close();
	        //以上只进行了发送操作
	        socket.close();
	    } catch (Exception e) {
	        e.printStackTrace();
	    } 
		} 
		
}

进行图片传输编码过程中,遇到一些麻烦,查了一些资料,整合了其他前辈的资源写的程序,亲测有效,发下博客。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值