java上传网络图片_java网络编程之图片上传
輸入輸出流核心代碼
所有的文件傳輸都是靠流,其中文件復(fù)制最具代表性.輸入流和輸出流,從輸入流中讀取數(shù)據(jù)寫入到輸出流中。
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套接字連接服務(wù)器,指定ip和端口
Socket socket = Socket(String host, int port);
2.通過Socket獲取字節(jié)輸出流,向服務(wù)器寫圖片
OutputStream os = socket.getOutputStream();
3.創(chuàng)建輸入流對(duì)象,讀取圖片數(shù)據(jù)源
FileInputStream fis = new FileInputStream(filePath);
4.讀取圖片,使用字節(jié)輸出流,將圖片寫到服務(wù)器,采用字節(jié)數(shù)組進(jìn)行緩沖
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1){
os.write(bytes,0,len);
}
socket.shutdownOutput();//文件讀完時(shí)給服務(wù)器寫終止序列
5.通過Socket套接字獲取字節(jié)輸入流,讀取服務(wù)器發(fā)回來的上傳成功
InputStream inputStream = socket.getInputStream();
len = inputStream.read(bytes);
System.out.println("服務(wù)器返回:"+new String(bytes,0,len));
6.關(guān)閉資源
socket.close();
/*** 實(shí)現(xiàn)TCP圖片上傳客戶端
* 實(shí)現(xiàn)步驟:
* 1.Socket套接字連接服務(wù)器,指定ip和端口
* Socket socket = Socket(String host, int port);
* 2.通過Socket獲取字節(jié)輸出流,寫圖片
* OutputStream os = socket.getOutputStream();
* 3.使用自己的流對(duì)象,讀取圖片數(shù)據(jù)源
* FileInputStream fis = new FileInputStream(filePath);
* 4.讀取圖片,使用字節(jié)輸出流,將圖片寫到服務(wù)器,采用字節(jié)數(shù)組進(jìn)行緩沖
* int len = 0;
* byte[] bytes = new byte[1024];
* while ((len = fis.read(bytes)) != -1){
* os.write(bytes,0,len);
* }
* 5.通過Socket套接字獲取字節(jié)輸入流,讀取服務(wù)器發(fā)回來的上傳成功
* InputStream inputStream = socket.getInputStream();
* len = inputStream.read(bytes);
* System.out.println("服務(wù)器返回:"+new String(bytes,0,len));
* 6.關(guān)閉資源
* socket.close();
*
* Created by Autumn on 2018/2/5.*/
public classTCPClient {public static void main(String[] args) throwsIOException {
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");
}/*** 上傳圖片
*@paramip 服務(wù)器ip地址
*@paramport 服務(wù)器端口號(hào)
*@paramfilePath 文件路徑
*@throwsIOException*/
public static void uploadPic(String ip,int port,String filePath) throwsIOException{//創(chuàng)建客戶端Socket
Socket socket = newSocket(ip,port);//根據(jù)Socket獲取字節(jié)輸出流,用此流將圖片寫到服務(wù)器
OutputStream os =socket.getOutputStream();//創(chuàng)建字節(jié)輸入流,讀取本機(jī)上的數(shù)據(jù)源圖片
FileInputStream fis = newFileInputStream(filePath);//開始讀寫字節(jié)數(shù)組,從輸入流中讀取到輸出流
int len = 0;byte[] bytes = new byte[1024];while ((len = fis.read(bytes)) != -1){
os.write(bytes,0,len);
}//文件讀完時(shí)給服務(wù)器寫終止序列
socket.shutdownOutput();//獲取字節(jié)輸入流,讀取服務(wù)器的上傳成功
InputStream inputStream =socket.getInputStream();
len=inputStream.read(bytes);
System.out.println("服務(wù)器返回:"+new String(bytes,0,len));
socket.close();
}
}
TCP圖片上傳服務(wù)器端
1.ServerSocket套接字對(duì)象,監(jiān)聽8000
ServerSocket serverSocket = ServerSocket(int port);
2.方法accept()獲取客戶端的連接對(duì)象
Socket socket = serverSocket.accept();
3.客戶端連接對(duì)象獲取字節(jié)輸入流,讀取客戶端發(fā)送圖片
InputStream in = socket.getInputStream();
4.創(chuàng)建File對(duì)象,綁定上傳文件夾。判斷文件夾存在,不存在則創(chuàng)建文件夾
File upload = new File("d:\\upload");
if (!upload.exists()){
upload.mkdirs();
}
5.創(chuàng)建字節(jié)輸出流,數(shù)據(jù)目的File對(duì)象所在文件夾
String fileName = "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";
FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);
6.字節(jié)流讀取圖片,字節(jié)流將圖片寫入到目的文件中
byte[] bytes = new byte[1024];
int len = 0;
while((len = in.read(bytes))!=-1){ ? ? //讀的是客戶端發(fā)過來圖片的字節(jié)數(shù)組,只有讀文件能讀到-1,所以這里永遠(yuǎn)讀不到-1,read()會(huì)一直阻塞。(需要客戶端發(fā)送結(jié)束標(biāo)志)
fos.write(bytes,0,len);
}
7.將上傳成功回寫給客戶端
socket.getOutputStream().write(("上傳到服務(wù)器"+socket.getLocalAddress().toString()+"成功").getBytes());
8.關(guān)閉資源
fos.close();
socket.close();
/*** 多線程接收?qǐng)D片
* Created by Autumn on 2018/2/5.*/
public classTCPThreadServer {public static void main(String[] args) throwsIOException {//服務(wù)端不用指定ip地址,只需指定端口號(hào)
ServerSocket serverSocket = new ServerSocket(8000);while(true){//獲得一個(gè)客戶端Socket對(duì)象,開啟一個(gè)線程
Socket socket = serverSocket.accept(); //線程阻塞
new Thread(newUpload(socket)).start();
}
}
}/*** TCP圖片上傳服務(wù)器
* 1.ServerSocket套接字對(duì)象,監(jiān)聽8000
* ServerSocket serverSocket = ServerSocket(int port);
* 2.方法accept()獲取客戶端的連接對(duì)象
* Socket socket = serverSocket.accept();
* 3.客戶端連接對(duì)象獲取字節(jié)輸入流,讀取客戶端發(fā)送圖片
* InputStream in = socket.getInputStream();
* 4.創(chuàng)建File對(duì)象,綁定上傳文件夾。判斷文件夾存在,不存在則創(chuàng)建文件夾
* File upload = new File("d:\\upload");
* if (!upload.exists()){
* upload.mkdirs();
* }
* 5.創(chuàng)建字節(jié)輸出流,數(shù)據(jù)目的File對(duì)象所在文件夾
* String fileName = "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";
* FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);
* 6.字節(jié)流讀取圖片,字節(jié)流將圖片寫入到目的文件中
* byte[] bytes = new byte[1024];
* int len = 0;
* while((len = in.read(bytes))!=-1){ //讀的是客戶端發(fā)過來圖片的字節(jié)數(shù)組,只有讀文件能讀到1,所以永遠(yuǎn)讀不到-1
* fos.write(bytes,0,len);
* }
* 7.將上傳成功回寫給客戶端
* socket.getOutputStream().write(("上傳到服務(wù)器"+socket.getLocalAddress().toString()+"成功").getBytes());
* 8.關(guān)閉資源
* fos.close();
* socket.close();
* Created by Autumn on 2018/2/5.*/
public class Upload implementsRunnable {privateSocket socket;publicUpload(Socket socket){this.socket =socket;
}
@Overridepublic voidrun() {try{//獲取輸入流
InputStream in =socket.getInputStream();//創(chuàng)建文件夾
File upload = new File("d:\\upload");if (!upload.exists()){
upload.mkdirs();
}
String fileName= "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";//創(chuàng)建字節(jié)輸出流,將圖片寫入到目的文件夾 upload:d://upload
FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);//讀寫字節(jié)數(shù)組
byte[] bytes = new byte[1024];int len = 0;while((len = in.read(bytes))!=-1){ //讀的是客戶端發(fā)過來圖片的字節(jié)數(shù)組,只有讀文件能讀到1,所以永遠(yuǎn)讀不到-1
fos.write(bytes,0,len);
}
System.out.println("成功接收來自"+socket.getInetAddress()+socket.getPort()+"的圖片!");//通過客戶端連接對(duì)象獲取字節(jié)輸出流//上傳成功寫會(huì)客戶端
socket.getOutputStream().write(("上傳到服務(wù)器"+socket.getLocalAddress().toString()+"成功").getBytes());
fos.close();
socket.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
總結(jié)
以上是生活随笔為你收集整理的java上传网络图片_java网络编程之图片上传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java领域对象_java的几种对象(p
- 下一篇: java crossdomin.xml_