java代码:

            Map map = new HashMap();
String fileStr = getFileStr(path);//这里path就是我们服务器上的文件存放路径
map.put("appFileStr", fileStr);
       String result = HttpClientUtil.callHttpPost(ip, port, "reciveFile", map);
public String getFileStr(String path) {//这里是我们封装好的读取文件获得的并经过BASE64加密之后的字符串的方法
String resultStr = "";
try {
int b;
File file = new File(path);
byte[] temp = new byte[(int) (file.length())];
FileInputStream inputstream = new FileInputStream(file);//本地文件的输入流
BufferedInputStream in = new BufferedInputStream(inputstream);
StringBuffer fileStr = new StringBuffer();
BASE64Encoder encoder = new BASE64Encoder();
while ((b = in.read(temp)) != -1) {
fileStr.append(encoder.encode(temp));
}
inputstream.close();
resultStr = fileStr.toString();
} catch (IOException e) {
e.printStackTrace();
}
return resultStr;
}

Node.js客户端代码:

/**
* Created by Administrator on 2019/12/23.
*指尖敲打着世界 ----一个阳光而又不失帅气的少年!!!.
*/
var express=require('express'); /*引入*/
var bodyParser = require('body-parser');
var fs=require("fs");
var app=new express(); /*实例化*/
//配置body-parser中间件
// parse application/x-www-form-urlencoded//处理表单数据
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json //处理json数据
app.use(bodyParser.json({limit : "2100000kb"}));
app.post('/reciveFile',function(req,res){ var app = new Buffer.from(req.body.appFileStr, 'base64'); fs.writeFileSync("D:/upload/writeFileTest.zip",app);//注意:writeFile写入的文件zip打不开,具体原因不明,同道高人如果知晓,希望能够指点一二 res.send({retMsg: '收到发送文件流请求,正在接收', retCode: "1"}); }) app.listen(8089);

附录HttpClientUtil代码:

package com.yxjr.common.utils;

import net.sf.json.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils; import java.io.UnsupportedEncodingException;
import java.util.Map; public class HttpClientUtil {
//post提交调用方法
public static String callHttpPost(String hostIP, int port, String actionName, Map<String,String> paramsMap)
throws UnsupportedEncodingException {
JSONObject resultJSon = new JSONObject();
String callbackResult = "";
System.err.println("请求参数是: IP" + hostIP + " actionName:" + actionName + " params:" + paramsMap);
HttpClient httpClient = new DefaultHttpClient();
StringBuilder url = new StringBuilder("http://");
if (hostIP != null && !"".equals(hostIP) && !"".equals(actionName) && actionName != null) {
url.append(hostIP).append(":").append(String.valueOf(port)).append("/").append(actionName);
}
// if (hostIP != null && !"".equals(hostIP) && !"".equals(actionName) && actionName != null) {
// url.append(hostIP).append(":").append(String.valueOf(port)).append("/")
// .append(baseUrl).append("/").append(actionName);
// }
System.out.println(url);
String str ="";
if(paramsMap!=null && paramsMap.size()!=0){
str = JSONObject.fromObject(paramsMap).toString();
}
System.err.println("请求参数为:"+ str);
HttpPost httpPost = new HttpPost(url.toString());
StringEntity entity = new StringEntity(str, "utf-8");
//entity.setContentEncoding("utf-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
try {
HttpResponse response = httpClient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
String entityString = EntityUtils.toString(response.getEntity());
System.err.println("请求返回码为:"+ String.valueOf(statusCode)+" 返回结果为:" +entityString);
if(statusCode==200 ){
callbackResult = entityString;
}else{
resultJSon.put("retCode",-1);
resultJSon.put("retMsg","请求异常,请检查请求内容");
resultJSon.put("resultCode",statusCode);
callbackResult = resultJSon.toString();
}
} catch (Exception e) {
System.err.println("客户端连接异常:"+e.getMessage());
resultJSon.put("retCode",-2);
resultJSon.put("retMsg","连接异常,请检查客户端机服务是否正常开启");
resultJSon.put("resultCode",500);
callbackResult = resultJSon.toString();
e.printStackTrace();
}
return callbackResult;
} }

java后台服务器向Nodejs客户端发送压缩包文件的更多相关文章

  1. 极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6439313.html Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请 ...

  2. java后台通过Servlet给用户发送手机短信验证码,第一次写勿喷,欢迎转载

    短信验证码跟自己在Servlet画的验证码不一样,我们不用管短信验证码是怎么产生的,我们只需要关注如何调用短信验证码,在短信验证码里面添加 自己需要的随机数或者其他的内容. 现在直接上流程 第一步找一 ...

  3. java后台服务器实现极光推送

    一.添加极光推送所需要的jar包,项目使用的maven,所以只需要在pom文件里添加jar包依赖 <dependency> <groupId>cn.jpush.api</ ...

  4. Java TCP服务端向客户端发送图片

    /** * 1.创建TCP服务端,TCP客户端 * 2.服务端等待客户端连接,客户端连接后,服务端向客户端写入图片 * 3.客户端收到后进行文件保存 * @author Administrator * ...

  5. idea + springboot 的java后台服务器通过小米推送

    public class XiaomiPush { // 1.小米推送(我只推送Android且只应用regId发起推送,所以下面只有推送Android的代码 private static final ...

  6. java后台服务器启动脚本

    最近由于经常在项目上线或者调试中启动服务,由于要设置环境变量这些,所以为了方便写了个启动脚本,希望能够帮助大家,也算是给自己做个小笔记: example_project_start.sh: # /bi ...

  7. Java获取服务器IP和客户端IP

    服务器IP: String addr = InetAddress.getLocalHost().getHostAddress(); 说明:很明显上面是没考虑到服务器有多个iP的情况. 客户顿啊IP: ...

  8. java后台简单从腾讯云下载文件通知前端以附件的形式保存

    腾讯云对象存储和阿里云差不多 这是我的配置 /** * 腾讯云client * @return COSClient */ public static COSClient getCOSClient() ...

  9. Java以邮件附件的方式发送excel文件

    String to = "xxx@qq.com"; // 收件人的QQ邮箱 String from = "xxx@qq.com"; // 发件人的QQ邮箱 St ...

随机推荐

  1. 微服务、SOA、ESB比较

    很多时候会听到微服务.SOA.ESB之间有着联系也有着区别,有时候了解了一下,过段时间有混肴模糊了今天看了一篇文章写的很好,特地记录一下. 原文地址:https://mp.weixin.qq.com/ ...

  2. C和指针--预处理器

    编译一个C程序的第1个步骤是预处理(preprocessing)阶段.C预处理器在源代码编译之前对其进行一些文本性质的操作.它的主要任务包括删除注释.插入被#include指令包含的文件的内容.定义和 ...

  3. 网络OSI 7层模型

    OSI 的英文全程为Open Systems Interconnection ,中文全程为开放系统互联参考模型.是一个逻辑上的定义.主要用途使通信和计算系统自由互联,而不依赖其他架构或技.主要目标就是 ...

  4. Linux基本命令-chmod

           chmod命令用来变更文件或目录的权限.在UNIX系统家族里,文件或目录权限的控制分别以读取.写入.执行3种一般权限来区分,另有3种特殊权限可供运用.用户可以使用chmod指令去变更文件 ...

  5. <a>标签的target 属性 全局作用

    局部(或全局)设置<a>标签的target属性           对于超链接<a>标签,target属性的设置是比较关键的,在不同的用户场景下选用适合的新页面载入方式,可以大 ...

  6. Tomcat 启动闪退解决

    直接使用cmd进入tomcat 目录下进行启动,直接使用Catalina.bat run运行,查看报啥错.进一步进行解决

  7. Java&Selenium数据驱动【DataProvider+TestNG+Csv】

    Java&Selenium数据驱动[DataProvider+TestNG+Csv] package testNGWithDataDriven; import java.io.Buffered ...

  8. vue 后台获取文件流导出excel文件

    let params = { compStartTm: Date.parse(this.searchForm.compStartTm) / 1000, compEndTm: Date.parse(th ...

  9. Spring Bean装配(上)

    Bean:在spring的IOC里面,把配置到IOC容器里面的实体或者是对象都称为Bean Bean配置项 Bean的作用域 Bean的生命周期 Bean的自动装配 Resources&Res ...

  10. 09—mybatis注解配置join查询

    今天来聊mybatis的join查询,怎么说呢,有的时候,join查询确实能提升查询效率,今天举个left join的例子,来看看mybatis的join查询. 就不写的很细了,把主要代码贴出来了. ...