Java实现文件上传服务器和客户端

本文实例为大家分享了Java实现文件上传服务器和客户端的具体代码,供大家参考,具体内容如下

文件上传服务器端:

/**
 * 使用TCP协议实现上传功能的服务器端
 * 思路:
 * 新建ServerSocket
 * 等待客户端连接
 * 连接上后开启子线程,把连接获取的Socket传给子线程
 * 循环进行
 * @author yajun
 *
 */
public class UploadServer { 

 public static void main(String[] args) {
  UploadServer server=new UploadServer();
  UploadThread command=new UploadThread();
  server.start(command);
 } 

 /**
  * 功能:接受连接,开启子线程,循环
  * @param command 用于下载的子线程对象,该对象实现了Runnable接口
  */
 private void start(UploadThread command){
  //局部变量
  ServerSocket serverSocket = null;
  Socket transSocket;
  //业务逻辑
  try {
   serverSocket=new ServerSocket(55555);
   while(true){
    System.out.println("等待连接……");
    transSocket=serverSocket.accept();
    int i=0;
    i++;
    System.out.println("第"+i+"个连接");
    //用不用在下载完后关闭线程呢???
    command.setSocket(transSocket);
    Executors.newFixedThreadPool(5).execute(command);
   }
  //异常捕获
  } catch (IOException e) {
   e.printStackTrace();
  //关闭资源
  } finally{
   try {
    serverSocket.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }//End of try
 }//End of connect
 @Test
 public void testConnect() {
  //测试任务:先运行服务器端,然后多次运行客户端,服务器段可以不断创建子线程,则测试成功
  //测试准备:构造一个线程,用于模拟下载线程
  UploadThread command=new UploadThread();
  start(command); 

 } 

 @Test
 public void testDown() throws IOException {
  byte[] buf;
  ByteArrayInputStream bis;
  String str="canglaoshi.avi\ncontent,content,content";
  buf=str.getBytes();
  bis=new ByteArrayInputStream(buf);
  UploadThread ut=new UploadThread();
  ut.down(bis);
 }
}
//完成各个传输任务的子线程
class UploadThread implements Runnable{ 

 Socket socket;
 public UploadThread(){}
 public UploadThread(Socket socket){
  this.socket=socket;
 }
 @Override
 public void run() {
  InputStream in;
  try { 

   in = socket.getInputStream();
   down(in); 

  //异常处理
  } catch (IOException e) {
   e.printStackTrace();
  } finally{
   try {
    socket.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  //测试代码
  /*try {
   Thread.sleep(5000);
   System.out.println(Thread.currentThread().getName()+",复制完毕");
  } catch (InterruptedException e) {
   e.printStackTrace();
  }*/
 }//End of run
 public void setSocket(Socket socket){
  this.socket=socket;
 }
 //下载方法
 /**
  * 目标:把InputStream中的数据写入到本地
  * 思路:
  * 1.获取输入流,最好传入输入流,而不是直接从Socket获取,传入有利用单元测试
  * 2.从输入流中读到文件名
  * 3.新建文件和文件输出流
  * 4.从输入流中读到文件内容到文件输出流
  * 5.
  * @throws IOException
  */
 public void down(InputStream in) throws IOException{
  //局部变量
  char ch;
  char[] nameArr=new char[256];
  byte[] buf=new byte[1024];
  String name="";
  OutputStream out = null;
  //业务逻辑
  try {
   //第一步:获取文件名,构造文件输出流
   int i=0;
   while((ch=(char) in.read())!='\n'){
    nameArr[i++]= ch;
   }
   //name=nameArr.toString();//这句话无法将字符数组转换为字符串,需用下面的语句
   name=new String(nameArr);
   System.out.println("要下载的文件为:"+name);
   out=new FileOutputStream("src\\down\\"+name);
   //第二步:将输入流中的其他内容写入到文件
   int len;
   while((len=in.read(buf))!=-1){
    out.write(buf,0,len);
   }
   out.flush();
  //异常捕获
  } catch (IOException e) {
   e.printStackTrace();
  //关闭资源
  }finally{
   //疑问:两个捕获可不可以放到一块呢,怎样处理关闭流时的异常最好呢?
   in.close();
   out.close();
  }
  //调试
  System.out.println(name);
 } 

}//End of UploadThread 

文件上传客户端:

/**
 * 使用TCP协议实现上传功能的客户端
 * @author yajun
 */
public class UploadClient { 

 public static void main(String[] args) {
  UploadClient client=new UploadClient();
  client.upload("src\\thursday\\AsListTest.java");
 } 

 /**
  * 作用:上传文件到服务器
  * 1.建立到服务器的连接
  * 2.获取输出流
  * 3.将文件内容写入到输出流
  * 4.获取服务器的响应
  */
 private void upload(String name){
  Socket socket=null;
  OutputStream out;
  try {
   socket=new Socket("127.0.0.1", 55555);
   out=socket.getOutputStream();
   write2OutputStream(name, out);
  //异常捕获
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 @Test
 public void testUpload() {
  upload("src\\status.xml");
 }
 /**
  * 作用:传入文件名和输出流,将文件写入到输出流
  * @param path
  * @throws IOException
  */
 private void write2OutputStream(String path,OutputStream out) throws IOException{ 

  FileInputStream fis = null;
  byte[] buf=new byte[1024];
  String fileName="";
  //业务逻辑
  try { 

   //1.写入文件名
   fileName=path.substring(path.lastIndexOf('\\')+1);
   System.out.println("您要上传的文件名为:"+fileName);
   out.write(fileName.getBytes());
   out.write('\n');
   //2.写入文件内容
   fis=new FileInputStream(path);
   int len;
   while((len=fis.read(buf))!=-1){
    out.write(buf, 0, len);
   }
   out.flush();
  //异常处理
  } catch (IOException e) {
   e.printStackTrace();
  //关闭资源
  } finally{
   fis.close();
   out.close();
  }
 }//End of upload
 @Test
 public void testWrite2OutputStream() throws IOException {
  ByteArrayOutputStream out = null;
  try {
   out=new ByteArrayOutputStream();
   write2OutputStream("src\\status.xml", out);
   System.out.println(out.toString("utf-8"));
  } catch (IOException e) {
   e.printStackTrace();
  } finally{
   out.close();
  } 

 } 

}

本文已被整理到了《Java上传操作技巧汇总》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • java实现多文件上传至本地服务器功能
  • Java实现文件上传至服务器的方法
  • Java实现跨服务器上传文件功能
  • java文件上传至ftp服务器的方法
  • java实现上传文件到服务器和客户端
  • Java上传文件到服务器端的方法
  • Java上传文件图片到服务器的方法
  • 基于HTML5+js+Java实现单文件文件上传到服务器功能
  • Java实现图片上传到服务器并把上传的图片读取出来
  • java实现客户端向服务器发送文件
(0)

相关推荐

  • Java上传文件图片到服务器的方法

    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存,具体内容如下 首先是页面html的   我这是提交一个文件和类型 <div style="border: 1px solid red;"> 我是添加一张临时图片得到微信的media_id保存数据库! <form action="xxxxxxxxm" enctype="multipart/form-data" method="post">

  • java实现上传文件到服务器和客户端

    JAVA编写一个可以上传文件的服务器和客户端,具体内容如下 服务端 class Server { public static void main(String[] args) throws Exception { //建立服务端Socket ServerSocket ss = new ServerSocket(10005); //接收客户端Socket Socket fileLoaderSocket = ss.accept(); //打印连接信息 String ip = fileLoaderSo

  • Java实现跨服务器上传文件功能

    前几天做个项目,本身客户端和管理员端是写在一起的,共用一台服务器,客户上传的文件都是存在服务器的硬盘上的.老龙提出要把客户端和管理员端分离,这时候用户上传的附件的存储就出现问题了.显然,把大到几百M的apk文件存到数据库不现实,查了半天,在两端建立ftp服务器传文件是最快的方法. 具体流程是,用户登录外网客户端,上传文件到外网的服务器硬盘上,在此同时,文件通过外网服务器访问内网管理员服务器的ftp服务器,传到内网服务器的硬盘上.这样内网服务器可以对上传的文件进行加密签名工作,之后也通过ftp的方

  • java实现客户端向服务器发送文件

    本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下 服务器源代码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.In

  • Java上传文件到服务器端的方法

    Web文件上传采用POST的方式,与POST提交表单不同的是,上传文件需要设置FORM的enctype属性为multipart/form-data.由于上传的文件会比较大,因此需要设置该参数指定浏览器使用二进制上传.如果不设置,enctype属性默认为application/x-www-form-urlencoded,使用浏览器将使用ASCII向服务器发送数据,导致发送文件失败. 上传文件要使用文件域(<input type='file'/>,并把FORM的Enctype设置为multipar

  • Java实现图片上传到服务器并把上传的图片读取出来

    在很多的网站都可以实现上传头像,可以选择自己喜欢的图片做头像,从本地上传,下次登录时可以直接显示出已经上传的头像,那么这个是如何实现的呢? 下面说一下我的实现过程(只是个人实现思路,实际网站怎么实现的不太清楚) 实现的思路: 工具:MySQL,eclipse 首先,在MySQL中创建了两个表,一个t_user表,用来存放用户名,密码等个人信息, 一个t_touxiang表,用来存放上传的图片在服务器中的存放路径,以及图片名字和用户ID, T_touxiang表中的用户ID对应了t_user中的i

  • java实现多文件上传至本地服务器功能

    博主最近在做一个内网项目,内部可以访问外部数据,但是外部访问不了内部数据,这也就造成了可能文件无法上传,所以博主另辟蹊径,在本地服务器上建立一个文件夹专门用来存储上传数据. 环境:jdk,tomcat 一.前台上传文件(ajax上传) <input type="file" name="annexUrl" id="annexUrl" multiple="multiple"/> 其中multiple="mul

  • java文件上传至ftp服务器的方法

    用java实现ftp文件上传.我使用的是commons-net-1.4.1.zip.其中包含了众多的java网络编程的工具包. 1.把commons-net-1.4.1.jar包加载到项目工程中去. 2.看如下代码: import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ft

  • Java实现文件上传至服务器的方法

    在我们的web开发中,很多的时候都需要把本机的一些文件上传到web服务器上面去. 如:一个BBS系统,当用户使用这是系统的时候,能把本机的一些图片,文档上传到服务器上面去.然后其他用户可以去下载这些文件,那么这样的话,我们可以自己编程实现文件的上传 但是更好的方式是使用一些已有的组件帮助我们实现这种上传功能. 常用的上传组件: Apache 的 Commons FileUpload JavaZoom的UploadBean jspSmartUpload upload.jsp 代码: <%@ pag

  • 基于HTML5+js+Java实现单文件文件上传到服务器功能

    上传单文件到服务器       应公司要求,在HTML5页面上实现上传文件到服务器,对于一个还没毕业的实习生菜鸟来说,这可不得了-----不会,网上各种百度,找各种博客还是没解决,最后还是请教了公司的大神,人家给卸了一个例子,然后根据人家写的终于把这个上传文件搞定. 好了,开始上代码. HTML5代码: <form name="upform" action="" method="POST"> <input type ="

随机推荐