Java实现一个简单的文件上传案例
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实现一个简单的文件上传案例的更多相关文章
- [Vue]写一个简单的文件上传控件
这篇将介绍如何写一个简单的基于Vue+Element的文件上传控件. 控件将具有 1. 上传队列的列表,显示文件名称,大小等信息,可以显示上传进度实时刷新 2. 取消上传 使用Element的u ...
- 用python写一个简单的文件上传
用Pycharm创建一个django项目.目录如下: <!DOCTYPE html> <html lang="en"> <head> <m ...
- 使用jsp/servlet简单实现文件上传与下载
使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- Django 实现简单的文件上传
今天分享一下Django实现的简单的文件上传的小例子. 步骤 创建Django项目,创建Django应用 设计模型 处理urls.py 以及views.py 设计模板,设计表单 运行项目,查看数据库 ...
- Java进阶学习:将文件上传到七牛云中
Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...
- Java 客户端操作 FastDFS 实现文件上传下载替换删除
FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...
- DVWA靶机--简单的文件上传漏洞
简单的文件上传漏洞(靶机安全级别:low) 事先准备好一句话木马,密码为pass 上传一句话木马,显示上传路径(一般网站是不会显示路径的,这里靶机为了方便你测试漏洞,直接显示出了路径: ../../h ...
- TCP通信---文件上传案例、多线程文件上传
目前大多数服务器都会提供文件上传的功能,由于文件上传需要数据的安全性和完整性,很明显需要使用TCP协议来实现. TCP通信需要创建一个服务器端程序和一个客户端程序,实现客户端向服务器端上传文件 代码实 ...
随机推荐
- 聊聊Java中的异常及处理
前言 在编程中异常报错是不可避免的.特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时.今天就让我们来看看什么是异常和怎么合理的处理异常吧! 异常与error介绍 ...
- HTML的<Object>标签怎么用?
<object>标签是一个HTML标签,用于在网页中显示音频,视频,图像,PDF和Flash等多媒体:它通常用于嵌入由浏览器插件处理的Flash页面元素,如Flash和Java项目.它还可 ...
- CSS3 transform详解,关于如何使用transform
transform是css3的新特性之一.有了它可以box module变的更真实,这篇文章将全面介绍关于transform的使用. transform的作用 transform可以让元素应用 2D ...
- 数据库基础01-SQL基础语法
数据库查询语言(Structured Query Language) 数据库查询语言: DDL(data definition language) -数据定义语言,建库建表 DML (data man ...
- .net Framework4 类库调用Jwt
通过jwt源码,将其引用的Newtonsoft.Json.dll的9.0版本改为最新的12.0版本后重新生成以下文件. 下载地址: https://files.cnblogs.com/files/Zh ...
- ASP.NET MVC Route详解
在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎.Razor在减少代码冗余.增 ...
- CVE-2020-5902 F5 BIG-IP 远程代码执行漏洞
CVE-2020-5902 F5 BIG-IP 远程代码执行漏洞复现 漏洞介绍 F5 BIG-IP 是美国 F5 公司的一款集成了网络流量管理.应用程序安全管理.负载均衡等功能的应用交付平台. 近日, ...
- vue中v-model父子组件通信
有这样的需求,父组件绑定v-model,子组件输入更改父组件v-model绑定的数值.是怎么实现的呢? 实际上v-model 只是语法糖而已. <input v-model="inpu ...
- Bootstrap 搭建基础页面
基于Bootstrap实现下图所示效果的页面,一个居中的标题和一个大按钮: <!DOCTYPE html> <html lang="zh-cn"> < ...
- Python math 、cmath
1.math dir(math) 2.cmath 复数运算