Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
BiliDriveEx
提交
33811587
B
BiliDriveEx
项目概览
OpenDocCN
/
BiliDriveEx
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
BiliDriveEx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
33811587
编写于
3月 06, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化 util 逻辑
上级
187ffb78
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
12 deletion
+14
-12
BiliDriveEx/__main__.py
BiliDriveEx/__main__.py
+8
-8
BiliDriveEx/util.py
BiliDriveEx/util.py
+6
-4
未找到文件。
BiliDriveEx/__main__.py
浏览文件 @
33811587
...
...
@@ -73,9 +73,9 @@ def login_handle(args):
def
upload_handle
(
args
):
def
core
(
index
,
block
):
try
:
block_sha1
=
calc_sha1
(
block
,
hexdigest
=
True
)
block_sha1
=
calc_sha1
(
block
)
full_block
=
encoder
.
encode
(
block
)
full_block_sha1
=
calc_sha1
(
full_block
,
hexdigest
=
True
)
full_block_sha1
=
calc_sha1
(
full_block
)
url
=
is_skippable
(
full_block_sha1
)
if
url
:
log
(
f
"分块
{
index
+
1
}
/
{
block_num
}
上传完毕"
)
...
...
@@ -143,7 +143,7 @@ def upload_handle(args):
log
(
"暂不支持上传文件夹"
)
return
None
log
(
f
"上传:
{
os
.
path
.
basename
(
file_name
)
}
(
{
size_string
(
os
.
path
.
getsize
(
file_name
))
}
)"
)
first_4mb_sha1
=
calc_sha1
(
read_in_chunk
(
file_name
,
chunk_size
=
4
*
1024
*
1024
,
chunk_number
=
1
)
,
hexdigest
=
True
)
first_4mb_sha1
=
calc_sha1
(
read_in_chunk
(
file_name
,
chunk_size
=
4
*
1024
*
1024
,
chunk_number
=
1
))
history
=
read_history
()
if
first_4mb_sha1
in
history
:
url
=
history
[
first_4mb_sha1
][
'url'
]
...
...
@@ -175,7 +175,7 @@ def upload_handle(args):
thread
.
join
()
if
terminate_flag
.
is_set
():
return
None
sha1
=
calc_sha1
(
read_in_chunk
(
file_name
)
,
hexdigest
=
True
)
sha1
=
calc_sha1
(
read_in_chunk
(
file_name
))
meta_dict
=
{
'time'
:
int
(
time
.
time
()),
'filename'
:
os
.
path
.
basename
(
file_name
),
...
...
@@ -208,7 +208,7 @@ def download_handle(args):
block
=
image_download
(
block_dict
[
'url'
])
if
block
:
block
=
encoder
.
decode
(
block
)
if
calc_sha1
(
block
,
hexdigest
=
True
)
==
block_dict
[
'sha1'
]:
if
calc_sha1
(
block
)
==
block_dict
[
'sha1'
]:
file_lock
.
acquire
()
f
.
seek
(
block_offset
(
index
))
f
.
write
(
block
)
...
...
@@ -247,14 +247,14 @@ def download_handle(args):
log
(
f
"线程数:
{
args
.
thread
}
"
)
download_block_list
=
[]
if
os
.
path
.
exists
(
file_name
):
if
os
.
path
.
getsize
(
file_name
)
==
meta_dict
[
'size'
]
and
calc_sha1
(
read_in_chunk
(
file_name
)
,
hexdigest
=
True
)
==
meta_dict
[
'sha1'
]:
if
os
.
path
.
getsize
(
file_name
)
==
meta_dict
[
'size'
]
and
calc_sha1
(
read_in_chunk
(
file_name
))
==
meta_dict
[
'sha1'
]:
log
(
"文件已存在, 且与服务器端内容一致"
)
return
file_name
elif
is_overwritable
(
file_name
):
with
open
(
file_name
,
"rb"
)
as
f
:
for
index
,
block_dict
in
enumerate
(
meta_dict
[
'block'
]):
f
.
seek
(
block_offset
(
index
))
if
calc_sha1
(
f
.
read
(
block_dict
[
'size'
])
,
hexdigest
=
True
)
==
block_dict
[
'sha1'
]:
if
calc_sha1
(
f
.
read
(
block_dict
[
'size'
]))
==
block_dict
[
'sha1'
]:
# log(f"分块{index + 1}/{len(meta_dict['block'])}校验通过")
pass
else
:
...
...
@@ -285,7 +285,7 @@ def download_handle(args):
return
None
f
.
truncate
(
sum
(
block
[
'size'
]
for
block
in
meta_dict
[
'block'
]))
log
(
f
"
{
os
.
path
.
basename
(
file_name
)
}
(
{
size_string
(
meta_dict
[
'size'
])
}
) 下载完毕, 用时
{
time
.
time
()
-
start_time
:.
1
f
}
秒, 平均速度
{
size_string
(
meta_dict
[
'size'
]
/
(
time
.
time
()
-
start_time
))
}
/s"
)
sha1
=
calc_sha1
(
read_in_chunk
(
file_name
)
,
hexdigest
=
True
)
sha1
=
calc_sha1
(
read_in_chunk
(
file_name
))
if
sha1
==
meta_dict
[
'sha1'
]:
log
(
"文件校验通过"
)
return
file_name
...
...
BiliDriveEx/util.py
浏览文件 @
33811587
...
...
@@ -8,19 +8,21 @@ import types
import
requests
import
json
import
time
import
tempfile
bundle_dir
=
path
.
dirname
(
sys
.
executable
)
if
getattr
(
sys
,
"frozen"
,
False
)
else
path
.
dirname
(
path
.
abspath
(
__file__
)
)
bundle_dir
=
tempfile
.
gettempdir
(
)
size_string
=
lambda
byte
:
f
"
{
byte
/
1024
/
1024
/
1024
:.
2
f
}
GB"
if
byte
>
1024
*
1024
*
1024
else
f
"
{
byte
/
1024
/
1024
:.
2
f
}
MB"
if
byte
>
1024
*
1024
else
f
"
{
byte
/
1024
:.
2
f
}
KB"
if
byte
>
1024
else
f
"
{
int
(
byte
)
}
B"
def
calc_sha1
(
data
,
hex
digest
=
Fals
e
):
def
calc_sha1
(
data
,
hex
=
Tru
e
):
sha1
=
hashlib
.
sha1
()
if
isinstance
(
data
,
types
.
GeneratorType
):
if
hasattr
(
data
,
'__iter__'
)
and
\
type
(
data
)
is
not
bytes
:
for
chunk
in
data
:
sha1
.
update
(
chunk
)
else
:
sha1
.
update
(
data
)
return
sha1
.
hexdigest
()
if
hex
digest
else
sha1
.
digest
()
return
sha1
.
hexdigest
()
if
hex
else
sha1
.
digest
()
def
image_download
(
url
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录