最近遇到个问题,两个系统共用用户的头像,用户的头像在一个系统中保存,这就涉及到将图片通过scoket发送给另一个系统存储的问题,最初的思路是将图片读成byte[]数组,然后发送,但又发现,发送图片的同时还要发送密钥、uid、username等信息,好通过对方系统的验证,这就不好弄了,最后想出来,将图片读成字符串、然后模拟http post请求,将图片和密钥、uid等信息发送过去,在服务器端,将得到的byte[]数组写进文件中,最后实验真的成功了,我做了整理和消化,也有不足,请指教,代码如下:

//客户端

public static String readFileAsString(String fileName) throws Exception {

FileInputStream fis = new FileInputStream(fileName);

BufferedInputStream in = new BufferedInputStream(fis);

byte buffer[] = new byte[256];

StringBuffer picStr=new StringBuffer();

BASE64Encoder base64=new BASE64Encoder();

while (in.read(buffer)>= 0){

picStr.append(base64.encode(buffer));//进行64位编码

}

fis.close();

fis=null;

in.close();

in=null;

buffer=null;

return picStr.toString();

}

public static void main(String[] a) {

try {

File file=new File("c:/雪狼突击队.jpg");

//将文件读成字符串

String picString=readFileAsString(file.toString());

//URLEncode

picString="picdata="+URLEncoder.encode(picString, "UTF-8");

String url="http://localhost:8080/Test/index.jsp?uid=1&username=test&auth=098f6bcd4621d373cade4e832627b4f6";

Socket socket =new Socket(InetAddress.getByName(url),80);

DataOutputStream dos=new DataOutputStream(socket.getOutputStream());

String message=""

+"POST "+url+" HTTP/1.1 \r\n "

+"Host: test.lingye.com \r\n "+"Accept: */* \r\n "

+"Cache-Control:no-cache \r\n" +"User-Agent: MSIE6.0; \r\n "

+"Content-Type: application/x-www-form-urlencoded \r\n "

+"Content-Length: "+picString.length()+" \r\n "

+"Connection: Close \r\n\r\n"//报头以两个\n作为结束标志

+picString+"\r\n ";//post数据

byte buffer[]=message.getBytes();

dos.write(buffer);

dos.flush();

dos.close();

//以上只进行了发送操作

socket.close();

} catch (Exception e) {

e.printStackTrace();

}

}

//服务器端

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String picdata=request.getParameter("picdata");

BASE64Decoder base64=new BASE64Decoder();

//64位解码

byte[] buffer=base64.decodeBuffer(picdata);

//写进文件

FileOutputStream fos=new FileOutputStream("c:/雪狼突击队1.jpg");

fos.write(buffer);

fos.flush();

fos.close();

fos=null;

}

代码很粗糙,大家看原理就好了,我试过上传.rar也是可以的

2

0

分享到:

2009-09-04 22:25

浏览 5285

评论

1 楼

北极光之吻

2012-05-22

学习了,继续学习...

问一下啊,java有没有办法实现类似:用IOCP和winsock事件选择模型分别写一段服务器和客户端程序 的问题,老师让我们用C++,我不想用C++写

java 图片请求_java中使用scoket模拟http post请求发送图片或文件相关推荐

  1. java怎么将加载图片消除_Java中加载图片的方法

    Java中添加图片,我知道有两种方法 用new ImageIcon("地址")函数,将图片放到JLabel中,然后把JLabel放到需要的地方就可以了 ImageIcon bg=n ...

  2. java命令模式_Java中的命令设计模式

    java命令模式 在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象 ...

  3. java struts 框架_java中struts 框架的实现

    该文章主要简单粗暴的实现了struts的请求转发功能. 其他的功能后续会慢慢补上. 最近在学习javassist的内容,看到一篇文章  大家一起写mvc  主要简单的描述了mvc的工作流程,同时实现了 ...

  4. java file 方法_JAVA中File的常用方法

    一.File类中包含了很多获得文件或文件夹属性的方法,使用起来比较方便,下面将常见的方法介绍如下: a.createNewFile方法 public boolean createNewFile() t ...

  5. java异常面试_java中异常的面试

    https://blog.csdn.net/qq_36523638/article/details/79363652 1) Java中的检查型异常和非检查型异常有什么区别? 这又是一个非常流行的Jav ...

  6. java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述

    阅读: 877 密钥库是用于存储加密密钥和证书的存储工具 ,最常用于SSL通信,以证明服务器和客户端的身份.密钥库可以是文件或硬件设备.有三种类型的条目可以存储在密钥库中,取决于密钥库的类型,这三种类 ...

  7. java幻灯片效果_java中怎么实现幻灯片切换特效?详细实例展示

    在java的使用过程中,我们会发现它的功能真的很强大,完成内容也极其丰富.今天就给大家介绍一下如何在java中实现幻灯片切换特效,以及通过实际的代码来为大家展示. 在最开始,需要说明的是,这个代码是实 ...

  8. java 自定义表达式_Java中使用Groovy实现自定义表达式解析

    Groovy作为一种JVM-Based语言,目前普及程度正在提高.本文演示一下在Java类中,通过继承GDK的groovy.lang.Script类如何支持自定义表达式解析功能. 输入: 表示一行数据 ...

  9. java 异常 中文_Java中所有的运行时异常,带中文解释

    展开全部 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:Negat ...

最新文章

  1. ERP实施流程---计划部
  2. Fail to connect to camera service的几种原因和解决方法
  3. c语言实现语音检测vad_TWS+AI?国芯发布超低功耗语音芯片,可能是目前最理想方案...
  4. LVS——DR模式下的健康检查
  5. System.Data.OleDb.OleDbException: 未指定的错误的解决方法
  6. Rsync安装与配置
  7. ios开发学习--动画(Animation)效果源码分享--系列教程1
  8. linux下使用python_使用Linux环境下的vim Python开发环境
  9. 高通android刷机工具,步步高工具高通版刷机救砖教程图解
  10. Android长截屏(滚动截屏)实现原理
  11. 做个vbs整人小程序
  12. matlab设计理想带通滤波器 bpf(f_sf_b1_b2),QDPSK信号数字化解调器中带通滤波器的设计与仿真...
  13. ghostscript windows mac 下安装和 C++ 程序调用
  14. WinDriver Kernel Plugin开发
  15. 如何创建对电脑屏幕的自动点击的脚本
  16. uplink端口能接路由器吗_交换机常见的网络故障,你知道如何解决吗?
  17. 网页被劫持会带来的影响是什么?
  18. 二叉树的遍历(前序遍历,中序遍历,后序遍历)
  19. IDEA中连接MySQL时报错:Server returns invalid timezone
  20. 什么软件去视频水印 拍抖音技巧视频教程

热门文章

  1. 自定义列表li项目符号
  2. 《编程之美》分离变量法,磁带访问优化方案
  3. 结对-四则运算答题器-开发过程
  4. USB OTG技术的发展现况
  5. 姚舜:出租屋里的独居青年,比你想象中要更……
  6. Unity DOTS ECS 0.50版本,海浪Demo
  7. ES系列、Elasticsearch Suggester API(自动补全)
  8. 破解《天龙八部》惊世之秘无名僧的身份
  9. heic文件怎么打开?
  10. OSI参考模型层次结构