文件的上传(TCP)
问题描述:将本地文件上传(需将文件名一起上传)至指定服务器,服务器将上传的文件保存至指定路径下并文件名添加前缀 "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)的更多相关文章
- 使用HttpClient实现文件的上传下载
1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源. 虽然在 JDK 的 java.net ...
- Android中Socket大文件断点上传
原文:http://blog.csdn.net/shimiso/article/details/8529633 什么是Socket? 所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一 ...
- 黏包-黏包的成因、解决方式及struct模块初识、文件的上传和下载
黏包: 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包. 只有TCP协议中才会产生黏包,UDP协议中不会有黏包(udp协议中数 ...
- vue 项目的文件/文件夹上传下载
前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践. ...
- 带进度条的文件批量上传插件uploadify
有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...
- C# 用原生JS进行文件的上传
1.此文章是用原生JS来进行文件的上传,有两个版本,一个不用ajax,一个用ajax. 1)非AJAX <!DOCTYPE html> <html> <head> ...
- ssh整合问题总结--在添加商品模块实现图片(文件)的上传
今天在做毕设(基于SSH的网上商城项目)中碰到了一个文件上传的需求,就是在后台管理员的商品模块中,有一个添加商品,需要将磁盘上的图片上传到tomcat保存图片的指定目录中: 完成这个功能需要两个步,第 ...
- 文件的上传(如何兼容火狐与IE)与国际化的原理
1.文件的上传 [1] 简介 > 将本地的文件上传到服务器中 > 用户需要通过一个表单将文件上传到服务器中 [2] 表单的设置 ...
- java实现ftp文件的上传与下载
最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...
- 在SpringMVC框架下实现文件的 上传和 下载
在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...
随机推荐
- vue2.0 vue-cli项目中路由之间的参数传递
1.首先配置路由, import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new R ...
- Struts2监听Action结果的监听器
作者:禅楼望月 在前面我们学到了在特定的Action中配置结果监听器,在Action完成控制处理之后,struts2转入实际的物理视图之前被回调.但是这种方式的缺点是,结果的监听器不能被复用.根据设计 ...
- Jprofiler分析WebSphere(配置WebSphereagent代理)
一. Windows+WebSphere+Jprofiler9 我们自己的windows机器监控本地的WebSphere,应该为服务器配置监控代理,供Jprofiler连接使用,具体步骤如下: 1 ...
- BZOJ3073 PA2011Journeys(线段树+bfs)
线段树优化建图裸题.建两棵线段树,一棵表示入一棵表示出.对题中所给的边新建一个虚拟点,将两段区间拆成线段树上对应区间,出线段树中对应区间所表示的点向虚拟点连边权0的边,虚拟点向入线段树中对应区间所表示 ...
- BZOJ4456 ZJOI2016旅行者(分治+最短路)
感觉比较套路,每次在长边中轴线处切一刀,求出切割线上的点对矩形内所有点的单源最短路径,以此更新每个询问,递归处理更小的矩形.因为若起点终点跨过中轴线是肯定要经过的,而不跨过中轴线的则可以选择是否经过中 ...
- 2017博普杯 东北大学邀请赛(B. Drink too much water)(贪心+树链剖分)
题目地址:https://oj.neu.edu.cn/problem/1204 题目大意: 其实就是树上的线段覆盖, 给出一棵n个结点的树,然后给出树上的一些路径进行覆盖,然后要求选取最少的点,能够把 ...
- 【题解】Bzoj4316小C的独立集
决定要开始学习圆方树 & 仙人掌相关姿势.加油~~ 其实感觉仙人掌本质上还是一棵树,长得也还挺优美的.很多的想法都可以往树的方面上靠,再针对仙人掌的特性做出改进.这题首先如果是在树上的话那么实 ...
- [Leetcode] String to integer atoi 字符串转换成整数
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
- Android tips tool 发现的性能问题(转载翻译)
先翻译刚好在研究到的一段,其余的无限期待续. 1.ObsoleteLayoutParam不起作用的标签 Invalid layout param in a LinearLayout: layout_c ...
- JavaScript的大括号的语义
Javascript中大括号"{}"有四种语义作用: 语义1. 组织复合语句,这是最常见的: view source print? 1 if( condition ) { 2 ...