问题描述:将本地文件上传(需将文件名一起上传)至指定服务器,服务器将上传的文件保存至指定路径下并文件名添加前缀 "Downlod_原文件名"。

思路: 客户端需要一个输入流来读取本地文件内容和文件名;需要一个输出流将读取的文件名发送至服务器端,然后再将内容发送至服务器端。

    服务器端需要一个输入流读取文件名和内容,需要一个输出流将读取到的文件名添加前缀并将内容保存至指定路径即可;

客户端示例代码:

 package Datagram;

 import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket; /*
* 客户端上传本地文件和文件名至指定服务器上
*/
public class FileUploadDemo {
public static void main(String[] args) throws Exception {
//创建客户端套接字对象
Socket s = new Socket();
//绑定发送的服务器地址和端口
InetSocketAddress isa = new InetSocketAddress("localhost", 8080);
//发起连接
s.connect(isa);
//获取输出流
OutputStream os= s.getOutputStream();
//查找指定文件
File file = new File("D:\\test.jpg");
//获取文件名
String fileName = file.getName();
//创建文件输入流
FileInputStream fis = new FileInputStream(file);
//写入文件长度(方便在服务端接收是需要知道传递的字节长度)
os.write(fileName.length());
//写入文件名
os.write(fileName.getBytes());
//读取指定文件内容
int len = -1;
byte[] by = new byte[1024];
while((len=fis.read(by))!=-1){
//将文件内容写入输出流中
os.write(by,0,len);
}
//禁掉输出流
s.shutdownOutput();
//关流
s.close();
fis.close();
os.close(); }
}

服务器端示例代码:

 package Datagram;

 import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket; /*
* 服务器端接收客户端发送的文件并保存该文件
*/
public class FileDownloadDemo {
public static void main(String[] args) throws Exception {
//创建服务端套接字对象
ServerSocket ss = new ServerSocket(8080);
//监听连接并接收连接
Socket s = ss.accept();
//获取输入流对象
InputStream is = s.getInputStream();
//对文件名的长度
int fileNameLength = is.read();
//按照读出的文件名的长度来存入字节数组
byte[] by = new byte[fileNameLength];
//按传递的文件名长度读取一次便得到的既是文件名
is.read(by); String fileName = new String(by);
//创建输出流并更改输出的文件名
FileOutputStream fis = new FileOutputStream("D:\\Downlod_"+fileName);
//读取文件
int len =-1;
by = new byte[1024];
while((len=is.read(by))!=-1){
//将读取到的数据写入输出流
fis.write(by,0,len);
}
//禁掉输入流
s.shutdownInput();
//关流
fis.close();
is.close(); }
}

文件的上传(TCP)的更多相关文章

  1. 使用HttpClient实现文件的上传下载

    1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源. 虽然在 JDK 的 java.net ...

  2. Android中Socket大文件断点上传

    原文:http://blog.csdn.net/shimiso/article/details/8529633 什么是Socket? 所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一 ...

  3. 黏包-黏包的成因、解决方式及struct模块初识、文件的上传和下载

    黏包: 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包. 只有TCP协议中才会产生黏包,UDP协议中不会有黏包(udp协议中数 ...

  4. vue 项目的文件/文件夹上传下载

    前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践. ...

  5. 带进度条的文件批量上传插件uploadify

    有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...

  6. C# 用原生JS进行文件的上传

    1.此文章是用原生JS来进行文件的上传,有两个版本,一个不用ajax,一个用ajax. 1)非AJAX <!DOCTYPE html> <html> <head> ...

  7. ssh整合问题总结--在添加商品模块实现图片(文件)的上传

    今天在做毕设(基于SSH的网上商城项目)中碰到了一个文件上传的需求,就是在后台管理员的商品模块中,有一个添加商品,需要将磁盘上的图片上传到tomcat保存图片的指定目录中: 完成这个功能需要两个步,第 ...

  8. 文件的上传(如何兼容火狐与IE)与国际化的原理

    1.文件的上传     [1] 简介         > 将本地的文件上传到服务器中         > 用户需要通过一个表单将文件上传到服务器中       [2] 表单的设置     ...

  9. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  10. 在SpringMVC框架下实现文件的 上传和 下载

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...

随机推荐

  1. elementUI中的el-form怎么使用正则进行验证

    http://element.eleme.io/#/zh-CN/component/form里给出了一个form验证的例子,但是都是使用el-form带有的验证规则,怎么使用自己定义的规则进行验证呢? ...

  2. C# 利用WMI对象获取物理内存和可用内存大小

    下面的代码演示的是使用WMI对象可获取取物理内存和可用内存大小,在使用WMI对象前,先要添加对System.Management的引用,然后就可以调用WMI对象,代码如下: //获取总物理内存大小 M ...

  3. 从pthread 到QThread

    该文出自:http://www.civilnet.cn/bbs/topicno/78430 使用线程技术进行应用编程的意义在gemfield的文章<从进程到线程>中已经介绍过了,我们就直奔 ...

  4. 基于log4j的消息流的实现之二消息传递

    在“基于log4j的消息流的实现之一消息获取”中获取日志消息的部分,修改如下: import org.apache.commons.collections.map.HashedMap; import ...

  5. springMVC笔记二

    第十四章 springmvc快速入门(注解版本) 1)springmvc快速入门(传统版) 步一:创建springmvc-day02这么一个web应用 步二:导入springioc,springweb ...

  6. jQuery - AJAX get()和post()方法

    jQuery get()和post()方法用于通过HTTP GET或POST请求从服务器请求数据. HTTP请求:GET VS POST 两种在客户端和服务器端进行请求-响应的常用方法是:GET和PO ...

  7. [NOIP2017 TG D1T2]时间复杂度

    题目大意:略 题解:模拟 卡点:1.数组忘清空 (考场代码风格独特...) C++ Code: #include<cstdio> #include<cstring> #incl ...

  8. 01、BUCK电路的参数计算

    案例:设计一个Buck电路,满足如下性能指标要求:一.性能指标要求  1.输入电压  2.输出电压  3.输出电压纹波  4.电流纹波  5.开关频率  二.需要计算的参数  三.BUCK电路拓扑   ...

  9. MySQL自增属性auto_increment_increment和auto_increment_offset

    MySQL的系统变量或会话变量auto_increment_increment(自增步长)和auto_increment_offset(自增偏移量)控制着数据表的自增列ID. mysql> sh ...

  10. malloc calloc realloc

    三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...