http协议传输图片

来源:互联网 发布:惠州网络车问政平台 编辑:程序博客网 时间:2024/06/01 20:06

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")); }



原创粉丝点击