zoukankan      html  css  js  c++  java
  • 使用 httpclient 上传下载文件

    问题:在WEB项目A中访问另一个WEB项目B,通过A向B中上传下载文件

    上传:

           HttpPost httpPost = new HttpPost(upload_url);
    
           MultipartEntityBuilder builder = MultipartEntityBuilder.create();
               builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式
           builder.addBinaryBody("file" , file, ContentType.MULTIPART_FORM_DATA, path);// 文件流
           builder.addTextBody("filename", path);// 类似浏览器表单提交,对应input的name和value
           HttpEntity entity = builder.build();
    
           httpPost.setEntity(entity);
    
           HttpResponse response = httpClient.execute(httpPost);// 执行提交

    下载:

                String url = download_url + URLEncoder.encode(path, "UTF-8");
                CloseableHttpClient httpclient = HttpClients.createDefault();
                HttpGet httpget = new HttpGet(url);
                HttpResponse response = httpclient.execute(httpget);
                entity = response.getEntity();
    
                InputStream in = entity.getContent();
    

      

    注意点:

    文件下载获取输入流后

    1、直接调用 in.available() 时,返回为0。原因:网络通讯往往是间断性的,一串字节往往分几批进行发送

    2、为解决上述问题,在调用 in.available() 前,先调用 in.read() 方法。使用该方法处理时,不能获取完整文件流

                int firstByte = inputStream.read();
                int length = inputStream.available();
                byte[] bytes = new byte[length+1];
                bytes[0] = (byte)firstByte;
                inputStream.read(bytes,1,length);
                inputStream.close();
    

    3、该问题出现原因同样是因为网络文件流不稳定,解决方法是循环读取

                ByteArrayOutputStream output = new ByteArrayOutputStream();
                byte[] buffer = new byte[4096];
                int n=0;
                while (-1 != (n = inputStream.read(buffer))) {
                    output.write(buffer, 0, n);
                }
                byte[] bytes = output.toByteArray();
    

      

      

  • 相关阅读:
    Install Jetty web server on CentOS 7 / RHEL 7
    Linux MYSQL:dead but pid file exists
    Tomcat7注册为Linux服务
    CentOS查看版本及架构信息
    CentOS(6.8)7 安装 Mysql 5.7
    CentOS7 截图
    Kitematic when login show Error:Tunning socket could not be established
    Installing and removing VNC Connect | Red Hat | VNC Connect
    使用 Nexus Repository Manager 搭建私有docker仓库
    Docker attach
  • 原文地址:https://www.cnblogs.com/m2492565210/p/15293987.html
Copyright © 2011-2022 走看看