文件下载案例 | 学习笔记

简介: 快速学习 文件下载案例

开发者学堂课程【Python入门 2020年版文件下载案例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10464


文件下载案例


内容介绍

一. 原始代码

二. 说明

三. 最终代码


.原始代码

1.文件下载客户端原始代码

import socket

s=socket.socket(socket.AF INET, socket.SOCK STREAM)

s.connect(('192.168.31.199'9090))

# s.send('hello'encode('utf8'))

file name=input('清输入您要下载的文件名:") s.send(file name.encode('utf8'))

content=srecv(1024)decode('utf8')  //接收服务器返回的文件

with open(file name, 'w', encoding='utf8') as file:

file.write(content)

s.close()

说明:

发送与接收过程为客户端告诉服务器想要文件的名称,服务器读取到名称后将文件发送给客户端。

先写入 socket 后连接到端口号和 ip 地址,再用 s.send 发送消息启动文件下载服务器后文件下载服务器可以收到消息

 image.png

content=srecv(1024)decode('utf8')接收服务器发送的文件

image.png

2.文件下载服务器原始代码

import socket

server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server_socket.bind(('192.168.31.199'9090)) server

server socket.listen(128)

#接收客户端的请求

client_socket,client_addr=server_socket.accept()

data=client_socket.recv(1024).decode('utf8')

if os.path.isfile(data):

#print('读取文件,返回给客户端)

with open(data, 'r', encoding='utf8') as file://data 保存发送端想要文件的名称

content =file.read()//读取文件

client socket.send(content.encode('utf8'))//通过客户端的 socket 返回给客户端

else:

print('文件不存在')

说明:

首先写入 socket,绑定 ip 地址和和端口号,写入监听和接收客户端请求


.说明

1.虚拟机作为客户端,windows 作为服务器,将 windows 中的文件 demo 下载到虚拟机中再用 client_socket.recv 读取数据

2.以上两段代码不能将图片打开,应该将所打开图片以二级制形式打开,并且加入读取网卡中字节的循环:

content =s.recv(1024)

if not content:

Break

3.代码运行过程

先输入要下载文件的名字,把文件名发给服务端,服务端接收之后通过 file.write(content )把内容写进来就完成了

4.不完善之处

在文件下载客户端中写入不存在的文件时,也能创建此文件,但此文件为空


.最终代码(可以传送图片)

1.文件下载服务器最终代码

import socket

server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server_socket.bind(('192.168.31.199',9090)) server socket.listen(128)

#接收客户端的请求

client socket, client addr=server socket.accept()

data=client socket.recv(1024).decode('utf8')

print('接收到了来自{}地址{}端口的数据,内容是:{}'.format(client addr[0], client addr[1],data))

if os.path.isfile(file name):

#print(读取文件,返回给客户端)

with open(file_name, 'rb') as file:

content =file.read()

client_socket.send(content)

else:

print('文件不存在')

2.文件下载客户端最终代码

import socket

s=socket.socket(socket.AF INET, socket.SOCK STREAM)

s.connect(('192.168.31.199',9090))

# s.send('hello'encode('utf8'))

file name=input("清输入您要下载的文件名:)

s.send(file name.encode('utf8'))

with open(file name, 'wb')as file:

while True:

content =s.recv(1024)

if not content:

break

file.write(content )

s.close()

相关文章
|
7月前
|
网络协议
|
前端开发
前端下载文件的几种方式
前端下载文件的几种方式
1081 0
|
编解码 前端开发 API
阿里云视频上传实战
最近在做项目优化,关于阿里云视频上传方面一直存在视频上传过慢问题.由于之前采用的是服务端进行视频上传,主要的逻辑是客户端上传视频到服务端进行视频文件暂存,然后服务端上传视频到阿里云.
阿里云视频上传实战
|
前端开发
前端项目实战100-控制上传文件只能上传一个
前端项目实战100-控制上传文件只能上传一个
142 0
利用微搭低代码实现附件的上传和下载
利用微搭低代码实现附件的上传和下载
利用微搭低代码实现附件的上传和下载
|
缓存 安全 JavaScript
如何实现上传文件到 nodejs 和文件下载
最近拿 next.js 做个全栈项目,需要文件上传和下载,这里记录下实现方式,也写一下使用原生 node 代码如何实现。
|
移动开发 前端开发 JavaScript
前端实现PDF文件下载的两种方式
前端实现PDF文件下载的两种方式
2065 0
前端实现PDF文件下载的两种方式
html+css实战35-上传多个文件功能
html+css实战35-上传多个文件功能
90 0
html+css实战35-上传多个文件功能
|
前端开发
文件下载的几种方式
文件下载的几种方式
|
Web App开发 Linux 网络安全
盘点4大下载神器,教你分分钟搞定文件下载
盘点4大下载神器,教你分分钟搞定文件下载
423 0
盘点4大下载神器,教你分分钟搞定文件下载