文件下载案例 | 学习笔记

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

开发者学堂课程【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()

相关文章
|
网络协议
|
2月前
|
JSON 前端开发 Go
前端文件下载的方式
【10月更文挑战第5天】
130 58
|
2月前
|
监控 前端开发 安全
C#一分钟浅谈:文件上传与下载功能实现
【10月更文挑战第2天】在Web应用开发中,文件的上传与下载是常见需求。本文从基础入手,详细讲解如何在C#环境下实现文件上传与下载。首先介绍前端表单设计及后端接收保存方法,使用`<input type="file">`与`IFormFile`接口;接着探讨错误处理与优化策略,如安全性验证和路径管理;最后讲解文件下载的基本步骤,包括确定文件位置、设置响应头及发送文件流。此外,还提供了进阶技巧,如并发处理、大文件分块上传及进度监控,帮助开发者构建更健壮的应用系统。
158 15
|
编解码 前端开发 API
阿里云视频上传实战
最近在做项目优化,关于阿里云视频上传方面一直存在视频上传过慢问题.由于之前采用的是服务端进行视频上传,主要的逻辑是客户端上传视频到服务端进行视频文件暂存,然后服务端上传视频到阿里云.
阿里云视频上传实战
|
分布式计算 Shell Spark
Zeepelin_安装_上传| 学习笔记
快速学习Zeepelin_安装_上传
Zeepelin_安装_上传| 学习笔记
|
Java 开发者
单文件上传 | 学习笔记
快速学习单文件上传,介绍了单文件上传系统机制, 以及在实际应用过程中如何使用。
单文件上传 | 学习笔记
|
前端开发 开发者
|
开发者
文章上传|学习笔记
快速学习文章上传
文章上传|学习笔记
|
存储 JavaScript 前端开发
【最不佳实践】文件上传并不简单
Serverless架构带来的除了一种新的架构,一种新的编程范式,还有就是一种思路上的转变,尤其是开发过程上的一些思路变化。有人说要把Serverless架构看成是一种天然的分布式架构,需要用分布式架构的思路去开发Serverless应用,诚然,这种说法是正确的,但是在一些情况下,Serverless还是有着一些特有的“特性”,所以在Serverless架构下,还是要有一些开发的“观念转变”。
274 0