大家好,如果您还对支持手机app的云盘网站源码分享不太了解,没有关系,今天就由本站为大家分享支持手机app的云盘网站源码分享的知识,包括网盘源码 支持app的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
此项目是作者偶然看到,并非原创,特此声明。
项目地址:https://github.com/iikira/BaiduPCS-Go
特色
百度帐号多用户支持;
网盘内列出文件和目录,支持通配符匹配路径,通配符_百度百科;
下载网盘内文件,支持网盘内目录(文件夹)下载,支持多个文件或目录下载,支持断点续传和高并发高速下载;
下载测试:
服务器:阿里云
下载4G文件,只需7分29秒
自己感受一下吧
程序编译/交叉编译说明
参见编译/交叉编译帮助
程序下载/运行说明
Go语言程序,可直接下载使用,点此查看发布页面/下载汇总.
如果程序运行时输出乱码,请检查下终端的编码方式是否为UTF-8.
使用本程序之前,建议学习一些linux基础知识和基础命令.
如果未带任何参数运行程序,程序将会进入独有的console模式,可直接运行相关命令.
console模式下,光标所在行的前缀应为BaiduPCS-Go>
程序会提供相关命令的使用说明.
Windows
程序应在命令提示符(CommandPrompt)或PowerShell中运行.
也可直接双击程序运行,具体使用方法请参见命令列表及说明和例子.
Linux/macOS
程序应在终端(Terminal)运行.
具体使用方法请参见命令列表及说明和例子.
Android/iOS
安卓,建议使用软件Termux或NeoTerm或终端模拟器,以提供终端环境.
示例:Android运行本BaiduPCS-Go程序参考示例,有兴趣的可以参考一下.
苹果iOS,需要越狱,在Cydia搜索下载并安装MobileTerminal,以提供终端环境.MobileTerminal功能有限,本人建议设备安装openssh后使用ssh控制苹果设备,sftp传输文件.
具体使用方法请参见命令列表及说明和例子.
命令列表及说明
注意!!!
命令的前缀BaiduPCS-Go为指向程序运行的全路径名(ARGv的第一个参数)
未带任何其他参数运行程序,则程序进入console模式,前缀为BaiduPCS-Go>,则运行以下命令时,要把命令的前缀BaiduPCS-Go去掉!
登录百度帐号
常规登录百度帐号
支持在线验证绑定的手机号或邮箱,
BaiduPCS-Gologin
使用百度BDUSS来登录百度帐号
关于获取百度BDUSS
BaiduPCS-Gologin-bduss=<BDUSS>
例子
BaiduPCS-Gologin-bduss=1234567
BaiduPCS-Gologin\n请输入百度用户名(手机号/邮箱/用户名),回车键提交>1234567
获取当前帐号,和所有已登录的百度帐号
BaiduPCS-Gologlist
切换已登录的百度帐号
BaiduPCS-Gosu-uid=12345678
BaiduPCS-Gosu\n请输入要切换帐号的index值>
退出已登录的百度帐号
BaiduPCS-Gologout-uid=12345678
BaiduPCS-Gologout\n请输入要退出帐号的index值>
获取配额,即获取网盘总空间,和已使用空间
BaiduPCS-Goquota
切换工作目录
BaiduPCS-Gocd<目录>
例子
使用通配符\nBaiduPCS-Gocd/我的*
输出当前所在目录
BaiduPCS-Gopwd
列出当前工作目录的文件和目录或指定目录
BaiduPCS-Gols
BaiduPCS-Gols<目录>
例子
BaiduPCS-Gols我的资源\n默认获取根目录元信息\nBaiduPCS-Gometa
例子
BaiduPCS-Gometa我的资源\nBaiduPCS-Gometa/
下载文件,网盘文件或目录的绝对路径或相对路径
BaiduPCS-Godownload<网盘文件或目录的路径1><文件或目录2><文件或目录3>…\nBaiduPCS-God<网盘文件或目录的路径1><文件或目录2><文件或目录3>…
支持多个文件或目录的下载.
下载的文件默认保存到程序所在目录的download/目录,支持设置指定目录,重名的文件会自动跳过!
例子
下载/我的资源/1.mp4\nBaiduPCS-God/我的资源/1.mp4\n下载网盘内的全部文件!!\nBaiduPCS-God/\nBaiduPCS-God*
上传文件
BaiduPCS-Goupload<本地文件或目录的路径1><文件或目录2><文件或目录3>…<网盘的目标目录>\nBaiduPCS-Gou<本地文件或目录的路径1><文件或目录2><文件或目录3>…<网盘的目标目录>
例子:
注意区别反斜杠”\\”和斜杠”/”!!!\nBaiduPCS-GouploadC:\\\\Users\\\\Administrator\\\\Desktop\\\\1.mp4/视频\n将本地的C:\\Users\\Administrator\\Desktop整个目录上传到网盘/视频目录\nBaiduPCS-GouploadC:\\\\Users\\\\Administrator\\\\Desktop/视频
创建目录
BaiduPCS-Gomkdir<目录>
例子
BaiduPCS-Gomkdir123
删除单个/多个文件/目录
BaiduPCS-Gorm<网盘文件或目录的路径1><文件或目录2><文件或目录3>…
注意:删除多个文件和目录时,请确保每一个文件和目录都存在,否则删除操作会失败.
例子
删除/我的资源/1.mp4和/我的资源/2.mp4\nBaiduPCS-Gorm/我的资源/1.mp4/我的资源/2.mp4\n删除/我的资源整个目录!!\nBaiduPCS-Gorm/我的资源
拷贝(复制)单个/多个文件/目录
BaiduPCS-Gocp<文件/目录><目标文件/目录>\nBaiduPCS-Gocp<文件/目录1><文件/目录2><文件/目录3>…<目标目录>
注意:拷贝(复制)多个文件和目录时,请确保每一个文件和目录都存在,否则拷贝操作会失败.
例子
将/我的资源/1.mp4和/我的资源/2.mp4复制到根目录/\nBaiduPCS-Gocp/我的资源/1.mp4/我的资源/2.mp4/
移动/重命名单个/多个文件/目录
重命名:\nBaiduPCS-Gomv<文件/目录><重命名的文件/目录>
注意:移动多个文件和目录时,请确保每一个文件和目录都存在,否则移动操作会失败.
例子
将/我的资源/1.mp4重命名为/我的资源/3.mp4\nBaiduPCS-Gomv/我的资源/1.mp4/我的资源/3.mp4
设置
BaiduPCS-GosetOptionNameValue
例子
设置下载文件的储存目录\nBaiduPCS-GosetsavedirD:\\\\Downloads\n#设置下载最大并发量为150\nBaiduPCS-Gosetmax_parallel150
举一些例子
新手建议:双击运行程序,进入console模式;
console模式下,光标所在行的前缀应为BaiduPCS-Go>
以下例子的命令,均为console模式下的命令
运行命令的正确操作:输入命令,按一下回车键(键盘上的Enter键),程序会接收到命令并输出结果
1.查看程序使用说明
console模式下,运行命令help
2.登录百度帐号(必做)
console模式下,运行命令login-h(注意空格)查看帮助
console模式下,运行命令login程序将会提示你输入百度用户名(手机号/邮箱/用户名)和密码,必要时还可以在线验证绑定的手机号或邮箱
3.切换网盘工作目录
console模式下,运行命令cd/我的资源将工作目录切换为/我的资源(前提:该目录存在于网盘)
目录支持通配符匹配,所以你也可以这样:运行命令cd/我的*或cd/我的??将工作目录切换为/我的资源,简化输入.
将工作目录切换为/我的资源成功后,运行命令cd..切换上级目录,即将工作目录切换为/
为什么要这样设计呢,举个例子,
假设你要下载/我的资源内名为1.mp4和2.mp4两个文件,而未切换工作目录,你需要依次运行以下命令:
d/我的资源/1.mp4\nd/我的资源/2.mp4
而切换网盘工作目录之后,依次运行以下命令:
cd/我的资源\nd1.mp4\nd2.mp4
这样就达到了简化输入的目的
4.网盘内列出文件和目录
console模式下,运行命令ls-h(注意空格)查看帮助
console模式下,运行命令ls来列出当前所在目录的文件和目录
console模式下,运行命令ls/我的资源来列出/我的资源内的文件和目录
console模式下,运行命令ls..来列出当前所在目录的上级目录的文件和目录
5.下载文件
说明:下载的文件将会保存到download/目录(文件夹)
console模式下,运行命令d-h(注意空格)查看帮助
console模式下,运行命令d/我的资源/1.mp4来下载位于/我的资源/1.mp4的文件1.mp4,该操作等效于运行以下命令:
cd/我的资源\nd1.mp4
现在已经支持目录(文件夹)下载,所以,运行以下命令,会下载/我的资源内的所有文件(违规文件除外):
d/我的资源
参见例6设置下载最大并发数
6.设置下载最大并发数
console模式下,运行命令set-h(注意空格)查看设置帮助以及可供设置的值
console模式下,运行命令setmax_parallel250将下载最大并发数设置为250
下载最大并发数建议值:50~500,太低下载速度提升不明显甚至速度会变为0,太高可能会导致程序和系统超负荷
7.退出程序
运行命令quit或exit或组合键Ctrl+C或组合键Ctrl+D
已知问题
下载进度到最后的时候,下载速度会降低.
程序的console模式在windows下部分中文无法正常输入.
TODO
上传大文件
部分请求核心源码:
packagerequester
import(
“bytes”
“fmt”
“io”
“io/ioutil”
“net/http”
“net/url”
“strings”
)
//HTTPGet简单实现http访问GET请求
funcHTTPGet(urlStrstring)(body[]byte,errerror){
resp,err:=http.Get(urlStr)
iferr!=nil{
returnnil,err
}
deferresp.Body.Close()
returnioutil.ReadAll(resp.Body)
}
//Req实现http/https访问,
//根据给定的method(GET,POST,HEAD,PUT等等),urlStr(网址),
//post(post数据),header(header请求头数据),进行网站访问。
//返回值分别为*http.Response,错误信息
func(h*HTTPClient)Req(methodstring,urlStrstring,postinterface{},headermap[string]string)(resp*http.Response,errerror){
var(
req*http.Request
obodyio.Reader
)
ifpost!=nil{
switchvalue:=post.(type){
caseio.Reader:
obody=value
casemap[string]string:
query:=url.Values{}
fork:=rangevalue{
query.Set(k,value[k])
}
obody=strings.NewReader(query.Encode())
casestring:
obody=strings.NewReader(value)
case[]byte:
obody=bytes.NewReader(value[:])
default:
returnnil,fmt.Errorf(“requester.Req:unknownposttype:%s”,value)
}
}
req,err=http.NewRequest(method,urlStr,obody)
iferr!=nil{
returnnil,err
}
//设置浏览器标识
req.Header.Set(“User-Agent”,UserAgent)
ifheader!=nil{
forkey:=rangeheader{
req.Header.Add(key,header[key])
}
}
returnh.Client.Do(req)
}
//Fetch实现http/https访问,
//根据给定的method(GET,POST,HEAD,PUT等等),urlStr(网址),
//post(post数据),header(header请求头数据),进行网站访问。
//返回值分别为网站主体,错误信息
func(h*HTTPClient)Fetch(methodstring,urlStrstring,postinterface{},headermap[string]string)(body[]byte,errerror){
resp,err:=h.Req(method,urlStr,post,header)
iferr!=nil{
returnnil,err
}
body,err=ioutil.ReadAll(resp.Body)
resp.Body.Close()
return
}
packagerequester
import(
“crypto/tls”
“net/http”
“net/http/cookiejar”
“time”
)
//HTTPClienthttpclient
typeHTTPClientstruct{
http.Client
}
//NewHTTPClient返回HTTPClient的指针,
//预设了一些配置
funcNewHTTPClient()*HTTPClient{
jar,_:=cookiejar.New(nil)
return&HTTPClient{
Client:http.Client{
Transport:&http.Transport{
TLSClientConfig:&tls.Config{
InsecureSkipVerify:true,
},
TLSHandshakeTimeout:10*time.Second,
DisableKeepAlives:false,
DisableCompression:false,//gzip
ResponseHeaderTimeout:10*time.Second,
ExpectContinueTimeout:10*time.Second,
},
Jar:jar,
Timeout:30*time.Second,
},
}
}
//SetCookiejar设置cookie
func(h*HTTPClient)SetCookiejar(c*cookiejar.Jar){
h.Jar=c
}
//ResetCookiejar清空cookie
func(h*HTTPClient)ResetCookiejar(){
h.Jar,_=cookiejar.New(nil)
}
//SetHTTPSecure是否启用https安全检查,默认不检查
func(h*HTTPClient)SetHTTPSecure(bbool){
h.Transport.(*http.Transport).TLSClientConfig.InsecureSkipVerify=!b
}
//SetKeepAlive设置Keep-Alive
func(h*HTTPClient)SetKeepAlive(bbool){
h.Transport.(*http.Transport).DisableKeepAlives=!b
}
//SetGzip是否启用Gzip
func(h*HTTPClient)SetGzip(bbool){
h.Transport.(*http.Transport).DisableCompression=!b
}
//SetResponseHeaderTimeout设置目标服务器响应超时时间
func(h*HTTPClient)SetResponseHeaderTimeout(ttime.Duration){
h.Transport.(*http.Transport).ResponseHeaderTimeout=t
}
//SetTimeout设置http请求超时时间,默认30s
func(h*HTTPClient)SetTimeout(ttime.Duration){
h.Timeout=t
}
packagerequester
var(
//UserAgent浏览器标识
UserAgent=”Mozilla/5.0(Macintosh;IntelMacOSX10_13_2)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36″
//DefaultClient默认http客户端
DefaultClient=NewHTTPClient()
)
packageuploader
import(
“bytes”
“github.com/iikira/BaiduPCS-Go/requester”
“mime/multipart”
“net/http”
“strings”
)
//Uploader上传
typeUploaderstruct{
URLstring//上传地址
IsMultiPartbool//是否表单上传
Body*reader//要上传的对象
client*requester.HTTPClient
onExecutefunc()
onFinishfunc()
}
//NewUploader返回uploader对象,url:上传地址,isMultipart:是否表单上传,uploadReaderLen:实现uploader.ReaderLen接口的对象,例如文件
funcNewUploader(urlstring,isMultipartbool,uploadReaderLenReaderLen,h*requester.HTTPClient)(uploader*Uploader){
uploader=&Uploader{
URL:url,
IsMultiPart:isMultipart,
Body:&reader{
uploadReaderLen:uploadReaderLen,
},
}
ifh==nil{
uploader.client=requester.NewHTTPClient()
}else{
uploader.client=h
}
//设置不超时
uploader.client.SetTimeout(0)
uploader.client.SetResponseHeaderTimeout(0)
return
}
//Execute执行上传
func(u*Uploader)Execute(checkFuncfunc(resp*http.Response,errerror)){
gofunc(){
u.touch(u.onExecute)
//开始上传
resp,_,err:=u.execute()
ifcheckFunc!=nil{
checkFunc(resp,err)
}
u.touch(u.onFinish)
}()
}
func(u*Uploader)execute()(resp*http.Response,codeint,errerror){
varcontentTypestring
ifu.IsMultiPart{
multipartWriter:=&bytes.Buffer{}
writer:=multipart.NewWriter(multipartWriter)
writer.CreateFormFile(“uploadedfile”,””)
u.Body.multipart=multipartWriter
u.Body.multipartEnd=strings.NewReader(“\\r\\n–“+writer.Boundary()+”–\\r\\n”)
contentType=writer.FormDataContentType()
}else{
contentType=”application/x-www-form-urlencoded”
}
req,err:=http.NewRequest(“POST”,u.URL,u.Body)
iferr!=nil{
returnnil,1,err
}
req.Header.Add(“Content-Type”,contentType)
//设置Content-Length不然请求会卡住不动!!!
req.ContentLength=u.Body.totalLen()
resp,err=u.client.Do(req)
iferr!=nil{
returnnil,2,err
}
returnresp,0,nil
}
//touch用于触发事件
func(u*Uploader)touch(fnfunc()){
iffn!=nil{
gofn()
}
}
//OnExecute任务开始时触发的事件
func(u*Uploader)OnExecute(fnfunc()){
u.onExecute=fn
}
//OnFinish任务完成时触发的事件
func(u*Uploader)OnFinish(fnfunc()){
u.onFinish=fn
}
欢迎大家一起交流网盘下载工具和方法。
关于支持手机app的云盘网站源码分享和网盘源码 支持app的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
