zoukankan      html  css  js  c++  java
  • Java后端HttpClient Post提交文件流 及服务端接收文件流

    客户端将文件转换为流发送:

    依赖的包:

    <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.4</version>
    </dependency>
    <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.4</version>
    </dependency>
     
    import com.alibaba.fastjson.JSONObject;
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;

    public static void main(String[] args) throws IOException { DataInputStream in = null; OutputStream out = null; HttpURLConnection conn = null; JSONObject resposeTxt = null; InputStream ins = null; ByteArrayOutputStream outStream = null; try { // URL url = new URL("http://192.168.3.11:8081/mes-boot-doc/test/fileupload?fileName=shafei.xls"); URL url = new URL("http://localhost:8081/mes-boot-doc/test/fileupload?fileName=shafei.xls"); conn = (HttpURLConnection) url.openConnection(); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "text/html"); conn.setRequestProperty("Cache-Control", "no-cache"); conn.setRequestProperty("Charsert", "UTF-8"); conn.connect(); conn.setConnectTimeout(10000); out = conn.getOutputStream(); File file = new File("C:/Users/Dell/Desktop/print/shafei.xls"); in = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] buffer = new byte[1024]; while ((bytes = in.read(buffer)) != -1) { out.write(buffer, 0, bytes); } out.flush(); // 返回流 if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { ins = conn.getInputStream(); outStream = new ByteArrayOutputStream(); byte[] data = new byte[1024]; int count = -1; while ((count = ins.read(data, 0, 1024)) != -1) { outStream.write(data, 0, count); } data = null; resposeTxt = JSONObject.parseObject(new String(outStream .toByteArray(), "UTF-8")); } } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } if (ins != null) { ins.close(); } if (outStream != null) { outStream.close(); } if (conn != null) { conn.disconnect(); } } }

      

    服务端接收文件流生成文件:

    @PostMapping("/fileupload")
        public String uploadFile(HttpServletRequest request,HttpServletResponse response) throws Exception{
            String fileName = request.getParameter("fileName");
            log.info("filename:"+fileName);
    //        String fileName ="shafei.xls";
    //        String fileFullPath = "C:/Users/Dell/Desktop/print/test/" + fileName;
            String fileFullPath = "/root/uploadfile/apache-tomcat-8.5.42/" + fileName;
    
            InputStream input = null;
            FileOutputStream fos = null;
            try {
                input = request.getInputStream();
                File file = new File("/root/uploadfile/apache-tomcat-8.5.42/");
                if(!file.exists()){
                    file.mkdirs();
                }
                fos = new FileOutputStream(fileFullPath);
                int size = 0;
                byte[] buffer = new byte[1024];
                while ((size = input.read(buffer,0,1024)) != -1) {
                    fos.write(buffer, 0, size);
                }
    
                //响应信息 json字符串格式
                Map<String,Object> responseMap = new HashMap<String,Object>();
                responseMap.put("flag", true);
    
                //生成响应的json字符串
                String jsonResponse = JSONObject.toJSONString(responseMap);
                sendResponse(jsonResponse,response);
            } catch (IOException e) {
                //响应信息 json字符串格式
                Map<String,Object> responseMap = new HashMap<String,Object>();
                responseMap.put("flag", false);
                responseMap.put("errorMsg", e.getMessage());
                String jsonResponse = JSONObject.toJSONString(responseMap);
                sendResponse(jsonResponse,response);
            } finally{
                if(input != null){
                    input.close();
                }
                if(fos != null){
                    fos.close();
                }
            }
    
            return null;
        }
    
        /**
         * 返回响应
         *
         * @throws Exception
         */
        private void sendResponse(String responseString,HttpServletResponse response) throws Exception {
            response.setContentType("application/json;charset=UTF-8");
            PrintWriter pw = null;
            try {
                pw = response.getWriter();
                pw.write(responseString);
                pw.flush();
            } finally {
                IOUtils.closeQuietly(pw);
            }
        }
    

      

  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/chafe/p/11413845.html
Copyright © 2011-2022 走看看