Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
ppt_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Li Feifei
ppt_server
Commits
59dc54a3
Commit
59dc54a3
authored
Jul 29, 2021
by
Li Feifei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
下载带进度条
parent
227f8a33
Pipeline
#15712
passed with stages
in 34 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
46 additions
and
1 deletions
+46
-1
http_client.go
library/http/http_client.go
+46
-1
No files found.
library/http/http_client.go
View file @
59dc54a3
package
http
import
(
"fmt"
"io"
"os"
"strings"
"time"
"github.com/gogf/gf/frame/g"
...
...
@@ -21,8 +23,47 @@ func handle(response *ghttp.ClientResponse, err error) ([]byte, error) {
return
response
.
ReadAll
(),
nil
}
type
WriteCounter
struct
{
Total
uint64
}
func
(
wc
*
WriteCounter
)
Write
(
p
[]
byte
)
(
int
,
error
)
{
n
:=
len
(
p
)
wc
.
Total
+=
uint64
(
n
)
wc
.
PrintProgress
()
return
n
,
nil
}
func
(
wc
WriteCounter
)
PrintProgress
()
{
// Clear the line by using a character return to go back to the start and remove
// the remaining characters by filling it with spaces
fmt
.
Printf
(
"
\r
%s"
,
strings
.
Repeat
(
" "
,
35
))
// Return again and print current status of download
// We use the humanize package to print the bytes in a meaningful way (e.g. 10 MB)
fmt
.
Printf
(
"
\r
Downloading... %s complete"
,
wc
.
formatFileSize
(
wc
.
Total
))
}
func
(
wc
WriteCounter
)
formatFileSize
(
fileSize
uint64
)
string
{
if
fileSize
<
1024
{
//return strconv.FormatInt(fileSize, 10) + "B"
return
fmt
.
Sprintf
(
"%.2fB"
,
float64
(
fileSize
)
/
float64
(
1
))
}
else
if
fileSize
<
(
1024
*
1024
)
{
return
fmt
.
Sprintf
(
"%.2fKB"
,
float64
(
fileSize
)
/
float64
(
1024
))
}
else
if
fileSize
<
(
1024
*
1024
*
1024
)
{
return
fmt
.
Sprintf
(
"%.2fMB"
,
float64
(
fileSize
)
/
float64
(
1024
*
1024
))
}
else
if
fileSize
<
(
1024
*
1024
*
1024
*
1024
)
{
return
fmt
.
Sprintf
(
"%.2fGB"
,
float64
(
fileSize
)
/
float64
(
1024
*
1024
*
1024
))
}
else
if
fileSize
<
(
1024
*
1024
*
1024
*
1024
*
1024
)
{
return
fmt
.
Sprintf
(
"%.2fTB"
,
float64
(
fileSize
)
/
float64
(
1024
*
1024
*
1024
*
1024
))
}
else
{
//if fileSize < (1024 * 1024 * 1024 * 1024 * 1024 * 1024)
return
fmt
.
Sprintf
(
"%.2fEB"
,
float64
(
fileSize
)
/
float64
(
1024
*
1024
*
1024
*
1024
*
1024
))
}
}
// 下载文件
func
Download
(
file
string
,
path
string
)
error
{
g
.
Log
()
.
Async
()
.
Infof
(
"Download File: %s"
,
path
)
resp
,
err
:=
g
.
Client
()
.
Get
(
file
)
if
err
!=
nil
{
...
...
@@ -35,10 +76,13 @@ func Download(file string, path string) error {
if
err
!=
nil
{
return
err
}
defer
out
.
Close
()
// 然后将响应流和文件流对接起来
_
,
err
=
io
.
Copy
(
out
,
resp
.
Body
)
counter
:=
&
WriteCounter
{}
_
,
err
=
io
.
Copy
(
out
,
io
.
TeeReader
(
resp
.
Body
,
counter
))
if
err
!=
nil
&&
err
==
io
.
EOF
{
return
nil
...
...
@@ -46,5 +90,6 @@ func Download(file string, path string) error {
if
err
!=
nil
{
return
err
}
fmt
.
Print
(
"
\n
"
)
return
nil
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment