Java实现一个简单的文件上传案例

实现流程:

1.客户端从硬盘读取文件数据到程序中

2.客户端输出流,写出文件到服务端

3.服务端输出流,读取文件数据到服务端中

4.输出流,写出文件数据到服务器硬盘中



下面上代码

上传单个文件

服务器端

package FileUpload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("服务器端启动");
//创建一个服务器端对象
ServerSocket serverSocket = new ServerSocket(8888);
//使用accept获取socket对象
Socket accept = serverSocket.accept();
//使用字节输入流读取
InputStream inputStream = accept.getInputStream();
//创建一个字节输出流输出到本地
FileOutputStream fileOutputStream = new FileOutputStream("F:\\this\\copy1.jpg",true);
//创建一个数组循环读取
byte[] bytes = new byte[1024];
int len;
while ((len=inputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
System.out.println("执行完毕");
fileOutputStream.close();
inputStream.close(); }
}

客户端

package FileUpload;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
//创建一个Socket对象
Socket socket = new Socket("127.0.0.1", 8888);
//读取本地文件
FileInputStream fileInputStream = new FileInputStream("F:\\1.jpeg");
//获取输出流向服务器写入数据
OutputStream outputStream = socket.getOutputStream();
//创建数组读取
byte[] bytes = new byte[1024];
int len;
//边都边写
while((len=fileInputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
outputStream.flush();
}
//由于不会写入-1所以调用socket的shutdownOutput方法把前面的数据都写入并且正常终止后面的序列
socket.shutdownOutput();
System.out.println("文件发送完毕");
fileInputStream.close();
outputStream.close();
socket.close();
}
}

循环上传

客户端代码

package FileUpload;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
//创建一个Socket对象
Socket socket = new Socket("127.0.0.1", 8888);
//读取本地文件
FileInputStream fileInputStream = new FileInputStream("F:\\1.jpeg");
//获取输出流向服务器写入数据
OutputStream outputStream = socket.getOutputStream();
//创建数组读取
byte[] bytes = new byte[1024];
int len;
//边都边写
while((len=fileInputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
outputStream.flush();
}
//由于不会写入-1所以调用socket的shutdownOutput方法把前面的数据都写入并且正常终止后面的序列
socket.shutdownOutput();
System.out.println("文件发送完毕");
fileInputStream.close();
outputStream.close();
socket.close();
}
}

服务器端代码

package FileUpload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("服务器端启动");
//创建一个服务器端对象
ServerSocket serverSocket = new ServerSocket(8888);
//使用while()持续写入数据
while(true){
//使用accept获取socket对象
Socket accept = serverSocket.accept();
//Socket对象交给子线程处理,进行读写操作,
new Thread(() ->{
{
//使用字节输入流读取
InputStream inputStream = null;
try {
//文件名
String name = new String("F:\\this\\"+ System.currentTimeMillis()+"copy1.jpg" );
inputStream = accept.getInputStream();
//创建一个字节输出流输出到本地
FileOutputStream fileOutputStream = new FileOutputStream(name,true);
//创建一个数组循环读取
byte[] bytes = new byte[1024];
int len;
while ((len=inputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
System.out.println("执行完毕");
fileOutputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
} }
}

循环输入无非就是增加了一个while循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,如有错误还请各位批评指正,喜欢我的可以点赞收藏,我会不定期更新文章,喜欢的也可以关注呀

Java实现一个简单的文件上传案例的更多相关文章

  1. [Vue]写一个简单的文件上传控件

    ​这篇将介绍如何写一个简单的基于Vue+Element的文件上传控件. 控件将具有 1. 上传队列的列表,显示文件名称,大小等信息,可以显示上传进度实时刷新 2. 取消上传 ​ 使用Element的u ...

  2. 用python写一个简单的文件上传

    用Pycharm创建一个django项目.目录如下: <!DOCTYPE html> <html lang="en"> <head> <m ...

  3. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  4. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  5. Django 实现简单的文件上传

    今天分享一下Django实现的简单的文件上传的小例子. 步骤 创建Django项目,创建Django应用 设计模型 处理urls.py 以及views.py 设计模板,设计表单 运行项目,查看数据库 ...

  6. Java进阶学习:将文件上传到七牛云中

    Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...

  7. Java 客户端操作 FastDFS 实现文件上传下载替换删除

    FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...

  8. DVWA靶机--简单的文件上传漏洞

    简单的文件上传漏洞(靶机安全级别:low) 事先准备好一句话木马,密码为pass 上传一句话木马,显示上传路径(一般网站是不会显示路径的,这里靶机为了方便你测试漏洞,直接显示出了路径: ../../h ...

  9. TCP通信---文件上传案例、多线程文件上传

    目前大多数服务器都会提供文件上传的功能,由于文件上传需要数据的安全性和完整性,很明显需要使用TCP协议来实现. TCP通信需要创建一个服务器端程序和一个客户端程序,实现客户端向服务器端上传文件 代码实 ...

随机推荐

  1. IDEA+Maven+Tomcat构建Web项目的三种方法

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 本文将介绍三种方 ...

  2. MySql索引要注意的8个事情

    设计好MySql索引可以让你的数据库查询效率大为提高.设计MySql索引的时候,有一些问题需要值得我们注意的: 1,创建MySql索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简 ...

  3. postman写测试用例

    接口测试引用聚合数据(手机号码归属地)接口 1,点击postman左上角红框+New Collection来创建文件,用来存放测试用例 文件名为号码归属地查询(随意)  2,右击文件选择Add Req ...

  4. python+opencv实现图像缩放

    x, y = img_.shape[0:2] img_ = cv2.resize(img_, (int(y/2), int(x/2))) 实现图像长宽缩小为原来的一半

  5. LeetCode57. 插入区间

    对于新插入的区间newInterval,原区间列表intervals可以分为三个部分: 左边与newInterval不重合的区间,这些区间直接加入结果数组中: 中间与newInterval重合的区间, ...

  6. Redis系列(九):数据结构Hash源码解析和HSET、HGET命令

    2.源码解析 1.相关命令如下: {"hset",hsetCommand,,"wmF",,NULL,,,,,}, {"hsetnx",hse ...

  7. 使用SpringBoot构建REST服务-什么是REST服务

    前言: 本文按照Spring官网构建REST服务的步骤测试,可以得到结论: 到底什么样的风格才是RESTful风格呢? 1,约束请求命令如下: GET,获取资源.例如:/employees表示获取列表 ...

  8. C#客户端通过安全凭证调用webservice

    怎么解决给XML Web services 客户端加上安全凭据,从而实现调用安全的远程web方法?首先,有远程web服务Service继承自System.Web.Services.Protocols. ...

  9. html5中contenteditable 光标_如何设置光标位置

    在js中,光标是一个对象,当你选中某个元素的时候才会出现光标对象.比如:我们点击一个输入框,实际会产生一个选中对象-selection,这个对象我们可以通过indow.getSelection()来获 ...

  10. 移动端1px像素解决方式,从1px像素问题剖析像素及viewport

    在移动端web开发过程中,如果你对边框设置border:1px,会发现,边框在某些手机机型上面显示的1px比实际感觉会变粗,这也就是1像素问题.如下图是对桌面浏览器和移动端border设置1px的比较 ...