欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

手把手教你上传女神照片到服务器

程序员文章站 2022-05-12 14:19:23
...

C语言自学完备手册(33篇)

Android多分辨率适配框架

JavaWeb核心技术系列教程

HTML5前端开发实战系列教程

MySQL数据库实操教程(35篇图文版)

推翻自己和过往——自定义View系列教程(10篇)

走出思维困境,踏上精进之路——Android开发进阶精华录

讲给Android程序员看的前端系列教程(40集免费****+源码)


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

概述

我们在开发过程中经常涉及到文件(图片、音频、压缩包等)的上传。绝大多数情况下,我们都采用第三方已经封装好的模块实现该功能。但是,它底层的实现原理是什么呢?我们可以自己动手实现文件的上传么?答案是肯定的!在此,我们使用Socket和IO流技术上传女神图片到服务器。

准备女神照片

手把手教你上传女神照片到服务器
景甜(Jing Tian),1988年7月21日出生于陕西省西安市,华语影视女演员。

2006年,景甜发行了个人首张音乐EP《你是谁》,并正式踏上演艺之路。
2010年,她凭借爱情片《我的美女老板》崭露头角 。
2011年,景甜因主演古装片《战国》而获得更多关注 。
2013年,其主演的《警察故事2013》 等三部电影合计票房超过12亿人民币 。
2014年,景甜主演了古装剧《班淑传奇》 。
2015年,其主演的传奇剧《大玉儿传奇》播出 。
2016年,她主演的魔幻片《长城》票房突破10亿人民币 。
2017年,景甜主演的宫廷剧《大唐荣耀》播出 。

客户端

package com.upload;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
/**
 * 本文作者:谷哥的小弟 
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
public class TCPUploadClient {
	public static void main(String[] args) {
		Socket socket=null;
		OutputStream outputStream=null;
		FileInputStream fileInputStream=null;
		InputStream inputStream=null;
		try {
			//创建与服务器通信的Socket
			socket=new Socket(InetAddress.getLocalHost(), 10086);
			//获取Socket输出流
			outputStream=socket.getOutputStream();
			//指定待上传文件
			fileInputStream=new FileInputStream("E:\\beauty.jpg");
			//上传文件至服务端
			byte[] b=new byte[1024*1];
			int len=0;
			while((len=fileInputStream.read(b))!=-1) {
				outputStream.write(b, 0, len);
			}
			//关闭客户端输出流
			socket.shutdownOutput();
			
			//读取服务端返回的消息
			inputStream=socket.getInputStream();
			byte[] buf=new byte[1024*1];
			int length=0;
			while((length=inputStream.read(buf))!=-1) {
				String string=new String(buf, 0, length);
				System.out.println(string);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}finally {
			if(outputStream!=null) {
				try {
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			if(fileInputStream!=null) {
				try {
					fileInputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(inputStream!=null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(socket!=null) {
				try {
					socket.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}

}

服务端

package com.upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 本文作者:谷哥的小弟 
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
public class TCPUploadServer {

	public static void main(String[] args) throws IOException {
		ServerSocket serverSocket=new ServerSocket(10086);
		while(true) {
			Socket client=serverSocket.accept();
			HandleUploadRunnableImpl handleUploadRunnableImpl=new HandleUploadRunnableImpl(client);
			Thread thread=new Thread(handleUploadRunnableImpl);
			thread.start();
		}
		
	}

}

//处理上传文件的Runnable
class HandleUploadRunnableImpl implements Runnable{
	private Socket socket=null;
	private InputStream inputStream=null;
	private FileOutputStream fileOutputStream=null;
	private OutputStream outputStream=null;
	public HandleUploadRunnableImpl(Socket socket) {
		this.socket=socket;
	}
	@Override
	public void run() {
		//获取客户端ip
		String ip=socket.getInetAddress().getHostAddress();
		try {
			//指定保存上传图片的目录
			File uploadDir=new File("D:\\upload");
			if(!uploadDir.exists()) {
				uploadDir.mkdir();
			}
			//指定文件保存的名称
			File file=new File(uploadDir,ip+".jpg");
			//读取客户端上传的文件并保存
			inputStream=socket.getInputStream();
			fileOutputStream=new FileOutputStream(file);
			byte[] b=new byte[1024*1];
			int len=0;
			while((len=inputStream.read(b))!=-1) {
				fileOutputStream.write(b, 0, len);
			}
			//向客服端返回消息
			outputStream = socket.getOutputStream();
			outputStream.write("上传完毕".getBytes());
		} catch (Exception e) {
			// TODO: handle exception
		}finally {
			if(inputStream!=null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(fileOutputStream!=null) {
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(outputStream!=null) {
				try {
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(socket!=null) {
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	
}

运行测试

手把手教你上传女神照片到服务器

相关标签: J2SE