java网络编程之图片上传
输入输出流核心代码
所有的文件传输都是靠流,其中文件复制最具代表性.输入流和输出流,从输入流中读取数据写入到输出流中。
InputStream in = 输入源;
OutputStream os = 输出目的;
byte[] bytes = new byte[1024];
int len = 0;
while((len = in.read(bytes))!=-1){ //读取到文件末尾的话可以读到-1
os.write(bytes,0,len);
}
os.close();
in.close();
TCP图片上传客户端
1.Socket套接字连接服务器,指定ip和端口
Socket socket = Socket(String host, int port);
2.通过Socket获取字节输出流,向服务器写图片
OutputStream os = socket.getOutputStream();
3.创建输入流对象,读取图片数据源
FileInputStream fis = new FileInputStream(filePath);
4.读取图片,使用字节输出流,将图片写到服务器,采用字节数组进行缓冲
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1){
os.write(bytes,0,len);
}
socket.shutdownOutput();//文件读完时给服务器写终止序列
5.通过Socket套接字获取字节输入流,读取服务器发回来的上传成功
InputStream inputStream = socket.getInputStream();
len = inputStream.read(bytes);
System.out.println("服务器返回:"+new String(bytes,0,len));
6.关闭资源
socket.close();
/**
* 实现TCP图片上传客户端
* 实现步骤:
* 1.Socket套接字连接服务器,指定ip和端口
* Socket socket = Socket(String host, int port);
* 2.通过Socket获取字节输出流,写图片
* OutputStream os = socket.getOutputStream();
* 3.使用自己的流对象,读取图片数据源
* FileInputStream fis = new FileInputStream(filePath);
* 4.读取图片,使用字节输出流,将图片写到服务器,采用字节数组进行缓冲
* int len = 0;
* byte[] bytes = new byte[1024];
* while ((len = fis.read(bytes)) != -1){
* os.write(bytes,0,len);
* }
* 5.通过Socket套接字获取字节输入流,读取服务器发回来的上传成功
* InputStream inputStream = socket.getInputStream();
* len = inputStream.read(bytes);
* System.out.println("服务器返回:"+new String(bytes,0,len));
* 6.关闭资源
* socket.close();
*
* Created by Autumn on 2018/2/5.
*/
public class TCPClient {
public static void main(String[] args) throws IOException {
String ip = "127.0.0.1";
int port = 8000;
File fileFolder = new File("D:\\Users\\Autumn\\Pictures"); uploadPic(ip,port,fileFolder+File.separator+"tiger.jpg");
uploadPic(ip,port,fileFolder+File.separator+"water.jpg");
uploadPic(ip,port,fileFolder+File.separator+"sunset.jpg");
} /**
* 上传图片
* @param ip 服务器ip地址
* @param port 服务器端口号
* @param filePath 文件路径
* @throws IOException
*/
public static void uploadPic(String ip,int port,String filePath) throws IOException{
//创建客户端Socket
Socket socket = new Socket(ip,port);
//根据Socket获取字节输出流,用此流将图片写到服务器
OutputStream os = socket.getOutputStream(); //创建字节输入流,读取本机上的数据源图片
FileInputStream fis = new FileInputStream(filePath); //开始读写字节数组,从输入流中读取到输出流
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1){
os.write(bytes,0,len);
} //文件读完时给服务器写终止序列
socket.shutdownOutput(); //获取字节输入流,读取服务器的上传成功
InputStream inputStream = socket.getInputStream();
len = inputStream.read(bytes);
System.out.println("服务器返回:"+new String(bytes,0,len)); socket.close();
}
}
TCP图片上传服务器端
1.ServerSocket套接字对象,监听8000
ServerSocket serverSocket = ServerSocket(int port);
2.方法accept()获取客户端的连接对象
Socket socket = serverSocket.accept();
3.客户端连接对象获取字节输入流,读取客户端发送图片
InputStream in = socket.getInputStream();
4.创建File对象,绑定上传文件夹。判断文件夹存在,不存在则创建文件夹
File upload = new File("d:\\upload");
if (!upload.exists()){
upload.mkdirs();
}
5.创建字节输出流,数据目的File对象所在文件夹
String fileName = "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";
FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);
6.字节流读取图片,字节流将图片写入到目的文件中
byte[] bytes = new byte[1024];
int len = 0;
while((len = in.read(bytes))!=-1){ //读的是客户端发过来图片的字节数组,只有读文件能读到-1,所以这里永远读不到-1,read()会一直阻塞。(需要客户端发送结束标志)
fos.write(bytes,0,len);
}
7.将上传成功回写给客户端
socket.getOutputStream().write(("上传到服务器"+socket.getLocalAddress().toString()+"成功").getBytes());
8.关闭资源
fos.close();
socket.close();
/**
* 多线程接收图片
* Created by Autumn on 2018/2/5.
*/
public class TCPThreadServer {
public static void main(String[] args) throws IOException {
//服务端不用指定ip地址,只需指定端口号
ServerSocket serverSocket = new ServerSocket(8000);
while(true){
//获得一个客户端Socket对象,开启一个线程
Socket socket = serverSocket.accept(); //线程阻塞
new Thread(new Upload(socket)).start();
}
}
} /**
* TCP图片上传服务器
* 1.ServerSocket套接字对象,监听8000
* ServerSocket serverSocket = ServerSocket(int port);
* 2.方法accept()获取客户端的连接对象
* Socket socket = serverSocket.accept();
* 3.客户端连接对象获取字节输入流,读取客户端发送图片
* InputStream in = socket.getInputStream();
* 4.创建File对象,绑定上传文件夹。判断文件夹存在,不存在则创建文件夹
* File upload = new File("d:\\upload");
* if (!upload.exists()){
* upload.mkdirs();
* }
* 5.创建字节输出流,数据目的File对象所在文件夹
* String fileName = "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";
* FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);
* 6.字节流读取图片,字节流将图片写入到目的文件中
* byte[] bytes = new byte[1024];
* int len = 0;
* while((len = in.read(bytes))!=-1){ //读的是客户端发过来图片的字节数组,只有读文件能读到1,所以永远读不到-1
* fos.write(bytes,0,len);
* }
* 7.将上传成功回写给客户端
* socket.getOutputStream().write(("上传到服务器"+socket.getLocalAddress().toString()+"成功").getBytes());
* 8.关闭资源
* fos.close();
* socket.close();
* Created by Autumn on 2018/2/5.
*/
public class Upload implements Runnable {
private Socket socket; public Upload(Socket socket){
this.socket = socket;
}
@Override
public void run() {
try {
//获取输入流
InputStream in = socket.getInputStream();
//创建文件夹
File upload = new File("d:\\upload");
if (!upload.exists()){
upload.mkdirs();
}
String fileName = "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";
//创建字节输出流,将图片写入到目的文件夹 upload:d://upload
FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);
//读写字节数组
byte[] bytes = new byte[1024];
int len = 0;
while((len = in.read(bytes))!=-1){ //读的是客户端发过来图片的字节数组,只有读文件能读到1,所以永远读不到-1
fos.write(bytes,0,len);
}
System.out.println("成功接收来自"+socket.getInetAddress()+socket.getPort()+"的图片!");
//通过客户端连接对象获取字节输出流
//上传成功写会客户端
socket.getOutputStream().write(("上传到服务器"+socket.getLocalAddress().toString()+"成功").getBytes());
fos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
java网络编程之图片上传的更多相关文章
- Java网络编程——TCP图片上传
1.编写一个服务器端程序,用来接收图片.创建一个监听指定端口号的ServerSocket服务端对象,在while(true)无限循环中持续调用ServerSocket的accept()方法来接收客户端 ...
- AFNetworking网络请求与图片上传工具(POST)
AFNetworking网络请求与图片上传工具(POST) .h文件 #import <Foundation/Foundation.h> /** 成功Block */ typedef vo ...
- Android利用网络编程HttpClient批量上传(一个)
请尊重他人的劳动成果.转载请注明出处:Android网络编程之使用HttpClient批量上传文件 我曾在<Android网络编程之使用HTTP訪问网络资源>一文中介绍过HttpCient ...
- Android利用网络编程HttpClient批量上传(两)AsyncTask+HttpClient监测进展情况,并上传
请尊重别人的劳动.转载请注明出处: Android网络编程之使用HttpClient批量上传文件(二)AsyncTask+HttpClient并实现上传进度监听 执行效果图: 我曾在<Andro ...
- Java+jquery实现裁剪图片上传到服务器
大体分两步: 1.利用jquery裁剪图片,把裁剪到的几个点传入后端 2.利用前端传入的几个点,来裁剪图片 首先,用到一个jquery的插件 imgAreaSelect 实例及插件下载地址:http: ...
- iOS图片上传1
这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问题,在这里总结一下. [部分知识] iphone中图像通常存储在4个地方[相册.应用程序包.沙盒.Internet], ...
- ios中摄像头/相册获取图片压缩图片上传服务器方法总结
本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下. 这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...
- 用java网络编程中的TCP方式上传文本文件及出现的小问题
自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...
- java实现图片上传功能,并返回图片保存路径
1.前端html <div class="form-group"> <label for="inputPassword3" class ...
随机推荐
- Linux下多个.c文件的编译和Makefile文件
在编程的时候,我们可以把一个完整程序的每个函数分离出来,写成.c文件,最后再一起编译和链接.这样有利于程序功能模块化,也方便检查代码错误. .h文件:里面编辑该程序需要引用的头文件. #ifndef ...
- MongoDB操作库/表
假设你已经安装好了MongoDB 不使用权限启动 mongod --fork --bind_ip 0.0.0.0 --dbpath=/mydata/mongo/data --logpath=/myda ...
- TOSCA自动化测试工具--识别元素唯一性的控件
当Modules模块通过Scan识别出页面元素后,选择需要测试的对象,然后判断对象唯一性
- json转List、Map
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Li ...
- centos上安装redmine
1.下载bitnami的redmine安装包 https://bitnami.com/stack/redmine/installer 2.安装remine ./bitnami-redmine-3.3. ...
- 谷歌技术"三宝"之谷歌文件系统(转)
原文地址:http://blog.csdn.net/opennaive/article/details/7483523 题记:初学分布式文件系统,写篇博客加深点印象.GFS的特点是使用一堆廉价的商用计 ...
- HDFS只支持文件append操作, 而依赖HDFS的HBase如何完成数据的增删改查
转:http://www.th7.cn/db/nosql/201510/135382.shtml 1. HDFS的文件append功能 早期版本的HDFS不支持任何的文件更新操作,一旦一个文件创建.写 ...
- 【HTML5校企公益课】第一天
1.搭建基本的开发环境.学校电脑用的是浏览器是Chrome,编辑器是HBuilder. 2.初步介绍HTML5的Web项目基本结构. css:样式表 img:存放图片 js:存放脚本文件 .html: ...
- python 打印 九九表
用Python 打印九九表. print 每打印一行默认会带有换行, 在print语句后加上,end = 't' 会变成tab. 排版会好点. def main(): for i in range(1 ...
- Eclipse安装Activiti插件(流程设计器)
Eclipse安装Activiti插件(流程设计器) 一.安装步骤: 1,打开Eclipse的 Help -> Install New Software,填上插件地址: Name:Activit ...