http协议传输图片

1. 通过org.apache.http.client.HttpClient

public String upload(String uri,String token,File f) throws UnsupportedEncodingException {
    String result = null;  
    MultipartEntityBuilder meb = MultipartEntityBuilder.create();

    ContentType contentType = ContentType.create("text/plain",Charset.forName("UTF-8"));         
    meb.addTextBody("token",token,contentType);           
    meb.addBinaryBody("file",f);
try { HttpPost request = new HttpPost(uri); RequestConfig config = RequestConfig. custom().setConnectionRequestTimeout( timeout) .setConnectTimeout( timeout).setSocketTimeout( timeout).build(); request.setConfig(config); request.setEntity(meb.build()); HttpResponse response = client.execute(request); if (response.getStatusLine().getStatusCode() == HttpStatus. SC_OK) { result = EntityUtils. toString(response.getEntity(), StandardCharsets. UTF_8); } } catch (Exception e) { } return result;}
 
  
2.通过java.net.URLConnection
 
  
public void httpUpload(String url){

    String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"; //边界符,可自行定义
    String prefix="--";//前缀 上传时需要多出两个-- 一定需要注意!!!
    String end="\r\n";//这里也需要注意,在html协议中,用 “/r/n” 换行,而不是 “/n”。

    SimpleDateFormat adf=new SimpleDateFormat("HHmmss");//通过时间来创建文件名
    String uploadname=adf.format(new Date())+".jsp";//上传的文件名称

    try {
        URL http=new URL(url);
        HttpURLConnection conn= (HttpURLConnection) http.openConnection();
        conn.setRequestMethod("POST");
        conn.setReadTimeout(5000);
        conn.setDoInput(true);//准许向服务器读数据
        conn.setDoOutput(true);//准许向服务器写入数据

        /*设置向服务器上传数据的请求方式  默认的是表单形式
        * 通过Content-Type协议向服务器上传数据
        * boundary
        * */
        conn.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary);

        //创建一个输出流对象,
        DataOutputStream out=new DataOutputStream(conn.getOutputStream());
        /*
        *
          -----------------------------7e020233150564
          Content-Disposition: form-data; name="file"; filename="I:\迅雷下载\18fb1f51c9eb63489cce9e029154782e.jpg"
          Content-Type: image/jpeg
                                    //这里是空一行  需要注意
          <二进制文件数据未显示>
          ---------------------------7e020233150564--
          */
        //向服务器写入数据  这里就需要完全根据以上协议格式来写,需要仔细,避免出错。
        out.writeBytes(prefix+boundary+end);//这是第一行  并回车换行
        //这是第二行,文件名和对应服务器的
        out.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\""+uploadname+"\""+end);//这是第二行
        out.writeBytes(end);//空一行
        //以下写入图片
        FileInputStream fileInputStream=new FileInputStream(new File("E://touxiang.jpg"));
        byte[]b=new byte[1024*4];//缓冲区
        int len;
        //循环读数据
        while((len=fileInputStream.read(b))!=-1){
            out.write(b, 0, len);
        }
        //写完数据后 回车换行
        out.writeBytes(end);
        out.writeBytes(prefix + boundary + prefix + end);
        out.flush();//清空

        //创建一个输入流对象  获取返回的信息  是否上传成功
        BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuffer sb=new StringBuffer();
        String str;
        while((str=reader.readLine())!=null){
            sb.append(str);
        }
        //关闭流信息
        if(out!=null)out.close();
        if(reader!=null)reader.close();

        System.out.print("返回结果:"+sb.toString());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
       e.printStackTrace();
    }
}
 
  
3.服务器接收文件
 
  
public void getImage(@RequestParam("file") MultipartFile file) throws IOException, ServletException {

    //将当前系统时间作为文件的名称避免重名
    //Date data=new Date();
    String loc = "E://";
    SimpleDateFormat adf = new SimpleDateFormat("HHmmss");
    String filename = adf.format(new Date());
    file.transferTo(new File("E://" + filename + ".jpg")); 

}



你可能感兴趣的:(java)