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

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

实现流程:

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

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

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

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

99920ec2617ad8ef2b00a99d6c71f3e2.png

下面上代码

上传单个文件

服务器端

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循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,如有错误还请各位批评指正,喜欢我的可以点赞收藏,我会不定期更新文章,喜欢的也可以关注呀

6a2465c5a6579a8dc4cd52b497800547.png

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

用Pycharm创建一个django项目.目录如下:

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

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

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 网络编程之TCP通信和简单的文件上传功能

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

随机推荐

JavaScript备忘录

提取字符串substring(start,end)substr(start [, length ])JavaScript substr() 方法 --

流量三角形:并非简单的"统计学"

又忙了一周多,今天过来再整理一些东西.国内做产险精算的,准备金的居多,从精算部落中的帖子的跟帖情况可见一斑.既然准备金更容易受到大家的关注,今天再整理一个关于准备金的个人看法,给精算部落收敛一下人气, ...

Docker的学习--命令使用详解

使用命令查看一下docker都有那些命令: docker -h 你将得到如下结果: A self-sufficient runtime for linux containers. Options: - ...

最基础的Hash

type thash=^node; node=record state:longint; next:thash; end; var a,i:longint; p:thash; hash:..]of t ...

Ajax从服务器端获取数据---原生态Ajax

写在前面的话 Ajax从服务器获取的数据都是字符串,但是通过不同的解析,可以解析为XML或JSON来进行应用. 一般来说.使用XML格式的数据比较通用,但是服务器和客户端解析起来都比较复杂一些;而使用 ...

Chapter 11. Frame, MainWindow, and Toplevel Widgets 框架,主窗体,顶级部件

Chapter 11. Frame, MainWindow, and Toplevel Widgets   框架,主窗体,顶级部件 框架和Toplevels 都是设计用于其他部件的容器. 它们的不同在 ...

openStack deep dive,Retake Policy

Method of Payment: visa MasterCard American Express Discover

SQLserver 一种简单的GUI方式创建DBlink copy 表数据的方法

1. 在sqlserver 上面使用GUI的方式创建dblink 首先打开查询分析器 在如下的位置处右键 -新建连接服务器 输入需要copy数据的服务器 输入ip地址 然后建立连接 在打开查询分析器进 ...

PGIS下载离线地图 SQLite+WPF

项目是超高分辨率屏幕墙,实时在线加载PGIS地图速度会比较慢,造成屏幕大量留白.于是使用地图缓存,事先把这个区块的地图全部down下来,使用Sqlite数据库保存.留存. //Task taskDow ...

Linux系统——Keepalived高可用集群

#### keepalived服务的三个重要功能1. 管理LVS负载均衡软件Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动,停止功能,这使得 ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值