手把手教你上传女神照片到服务器
发布日期:2021-06-30 11:11:12
浏览次数:2
分类:技术文章
本文共 4473 字,大约阅读时间需要 14 分钟。
版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址: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(); } }}//处理上传文件的Runnableclass 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(); } } } } }
运行测试
转载地址:https://it9527.blog.csdn.net/article/details/104170707 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月05日 21时14分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于SOA的分布式水果商店系统
2019-04-30
基于SSH的易买网商城的设计与实现
2019-04-30
基于SSH的婴幼儿产品销售系统的开发与设计毕业设计论文
2019-04-30
基于智能手机的报纸阅读器-论文
2019-04-30
网上体育商城的设计与实现毕业设计论文
2019-04-30
基于springboot项目申报系统完整源码
2019-04-30
Docker知识一:相关安装和基础命令
2019-04-30
Docker知识二:容器的数据卷
2019-04-30
Docker知识三:应用部署
2019-04-30
Docker知识四:Dockerfile
2019-04-30
Docker知识五:服务编排(Docker Compose概念)
2019-04-30
Docker知识六:Docker Compose应用
2019-04-30
Docker知识七:私有仓库
2019-04-30
Docker知识八:docker容器虚拟化与传统虚拟机比较
2019-04-30
javaWeb项目学生选课系统完整源码附带数据库
2019-04-30
一个汉字转拼音的小工具
2019-04-30
Oracle 数据库(database) 与 实例(instance) 的概念及关系整理
2019-04-30
Oracle 的 表空间(Tablespace)、用户(User)、模式(Schema)
2019-04-30
Oracle数据库的数据备份,本地,异地,exp-imp,expdp-impdp
2019-04-30
补:Oracle 的数据泵导出(expdp)及导入(impdp)
2019-04-30