文件的上传(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" ...
随机推荐
- 【历史】- Unix时代的开创者Ken Thompson
自图灵奖诞生以来,其获得者一直都是计算机领域的科学家与学者,而在所有这些界的图灵奖中只有唯一的一届有个例外,那就是Ken Thompson与Dennis M. Ritchie,他们都是计算机软件工程师 ...
- numEdit
说明: 利用tedit扩展的数字编辑框,允许设置正负.小数点等(The digital edit box using tedit extended, allowing the set of posi ...
- well-known file is not secure
执行jstack pid时,提示well-known file is not secure. 原因是pid的启动用户不是当前用户,需要切换到启动用户下执行jstack即可. 可以通过如下命令来处理: ...
- 【bzoj1176】[Balkan2007]Mokia/【bzoj2683】简单题 CDQ分治+树状数组
bzoj1176 题目描述 维护一个W*W的矩阵,初始值均为S(题目描述有误,这里的S没有任何作用!).每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数 ...
- C&C++——C与C++知识点
C++知识点系列之一(转+整理) 编程时类声明后面千万不要忘了加分号,不然会出现很多错误!! c系列之一一.#include “filename.h”和#include<filename.h&g ...
- 【BZOJ 3551】[ONTAK2010] Peaks加强版 Kruskal重构树+树上倍增+主席树
这题真刺激...... I.关于Kruskal重构树,我只能开门了,不过补充一下那玩意还是一棵满二叉树.(看一下内容之前请先进门坐一坐) II.原来只是用树上倍增求Lca,但其实树上倍增是一种方法,L ...
- ecplise中修改reviewboard密码
一.概述 如果想在ecplise中修改reviewboard密码,步骤请参考如下图片:
- GTK+与MFC不完全对比
转载自:http://tech.ddvip.com/2007-11/119640973738229.html 1. 两者都是基于面向对象设计的.尽管MFC是用C++写的,而GTK+是用C写的,但思想都 ...
- 图片上传是否为空,以及类型的js验证
function check2() { var file = document.getElementsByName("file").value; if(file=="&q ...
- [BZOJ1441&BZOJ2257&BZOJ2299]裴蜀定理
裴蜀定理 对于整系数方程ax+by=m,设d =(a,b) 方程有整数解当且仅当d|m 这个定理实际上在之前学习拓展欧几里得解不定方程的时候就已经运用到 拓展到多元的方程一样适用 BZOJ1441 给 ...