支持手机app的云盘网站源码分享(网盘源码 支持app)

大家好,如果您还对支持手机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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平