Tópico traduzido para Português Por: Jiraya
Upload & download de arquivos com RGSS
Versão: 2.1
Por: Berka
Introdução
Agora, o projeto louco é capaz de fazer download e upload de arquivos em servidores FTP ou HTTP.
Características
* Não há arquivos externos / libs, apenas Apis
* Fast transferências
* ProgressBars ...
* FTP e suporte http
Imagens
[img][/img]
Demo
RMVX
http://www.mediafire.com/download.php?314ttnndlzy
RMXP
http://www.mediafire.com/?tttn0yjzi52
Script:vx
Script:XP
Instruções
Instruções em Português
O arquivo baixado tem o mesmo nome do original
FAQ
Cole este script acima de main
Compatibilidade
Não há problema eu acho!
Créditos e Agradecimentos
MSDN, o meu melhor ^ ^ amigo
http://www.66rpg.com para peças de scripts!
Notas do Autor
próximo recurso:
avaliar o tamanho do arquivo: feito.
avaliar se o arquivo existe: feito.
Termos e Condições
Livre para usar, mas eu preciso de créditos.
desfrutar,
Berka
Upload & download de arquivos com RGSS
Versão: 2.1
Por: Berka
Introdução
Agora, o projeto louco é capaz de fazer download e upload de arquivos em servidores FTP ou HTTP.
Características
* Não há arquivos externos / libs, apenas Apis
* Fast transferências
* ProgressBars ...
* FTP e suporte http
Imagens
[img][/img]
Demo
RMVX
http://www.mediafire.com/download.php?314ttnndlzy
RMXP
http://www.mediafire.com/?tttn0yjzi52
Script:vx
- Spoiler:
- Código:
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Download & Upload Files with RGSS
# par berka v 2.1 rgss 2
# http://www.rpgmakervx-fr.com
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# thanks to: http://www.66rpg.com for documentation on wininet
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# ! do not use ftp which contains privates data
# ! this scripts need ftp account information !
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Ftp :
# â–¼ receive :
# Net::Ftp.download("dir_on_ftp/file.zip","./Graphics")
# â–¼ send :
# Net::Ftp.upload("./Graphics/file.zip","/dir_on_ftp/file.zip")
# â–¼ make directory :
# Net::Ftp.mkdir("/dir_on_ftp")
# Http :
# â–¼ receive :
# Net::Http.download("url","./Graphics")
# â–¼ total octets downloaded :
# Net::HTTP.dloaded
# â–¼ size of file :
# Net::HTTP.size("test.zip")
# â–¼ % dl progress :
# Net::HTTP.progress("test.zip")
# â–¼ transfer time:
# Net::HTTP.temps("test.zip")
# â–¼ list files :
# Net::HTTP.transfers
# â–¼ file loaded? :
# Net::HTTP.loaded?("test.zip")
# â–¼ octets transfered :
# Net::HTTP.transfered
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
module Berka
module NetError
ErrConIn="Unable to connect to Internet"
ErrConFtp="Unable to connect to Ftp"
ErrConHttp="Unable to connect to the Server"
ErrNoFFtpIn="The file to be download doesn't exist"
ErrNoFFtpEx="The file to be upload doesn't exist"
ErrTranHttp="Http Download is failed"
ErrDownFtp="Ftp Download is failed"
ErrUpFtp="Ftp Upload is failed"
ErrNoFile="No file to be download"
ErrMkdir="Unable to create a new directory"
end
end
include Berka::NetError
module Net
W='wininet'
SPC=Win32API.new('kernel32','SetPriorityClass','pi','i').call(-1,128)
IOA=Win32API.new(W,'InternetOpenA','plppl','l').call('',0,'','',0)
IC=Win32API.new(W,'InternetConnectA','lplpplll','l')
print(ErrConIn)if IOA==0
module FTP
FSCD=Win32API.new(W,'FtpSetCurrentDirectoryA','lp','l')
FGF=Win32API.new(W,'FtpGetFileA','lppllll','l')
FPF=Win32API.new(W,'FtpPutFile','lppll','l')
FCD=Win32API.new(W,'FtpCreateDirectoryA','lp','l')
module_function
def init
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
ftp="ftp.server.com" #
port=21 # Modify !
identifiant="user" #
motdepasse="password" #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
@fb=IC.call(IOA,ftp,port,identifiant,motdepasse,1,0,0)
ftp,port,identifiant,motdepasse=[nil]*4 # clear ftp ids !
(print(ErrConFtp))if @fb==0
end
def download(ext,int='./')
init if @fb.nil?
c=ext.split('/').pop
if FSCD.call(@fb,ext.gsub(c,''))!=0
print(ErrDownFtp)if FGF.call(@fb,c,"#{int}/#{c}",0,32,2,0)==0
else
print(ErrNoFFtpIn)
end
end
def mkdir(rep)
init if @fb.nil?
print(ErrMkdir)if FCD.call(@fb,rep)==0
end
def upload(int,ext)
init if @fb.nil?
if FSCD.call(@fb,ext)&&File.exist?(int)
print(ErrUpFtp)if FPF.call(@fb,int,ext,2,0)==0
else
print(ErrNoFFtpEx)
end
end
end
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
module HTTP
IOU=Win32API.new(W,'InternetOpenUrl','lppllp','l')
IRF=Win32API.new(W,'InternetReadFile','lpip','l')
ICH=Win32API.new(W,'InternetCloseHandle','l','l')
HQI=Win32API.new(W,'HttpQueryInfo','llppp','i')
module_function
def sizeloaded(i=0);@read[i];end
def transfered;@dloaded;end
def transfers;@dls;end
def progress(i=0);(@read[i].to_f/@size[i]*100);end
def loaded?(i=0);@read[i]>=@size[i];end
def temps(i=0);@tps[i];end
def size(i=0);@size[i];end
def download(url,int='./')
@dloaded||=0;@dls||={};@i||=-1;@size||={};@read||={};@tps={}
a=url.split('/');serv,root,fich=a[2],a[3..a.size].join('/'),a[-1]
print(ErrNoFile)if fich.nil?
@dls[fich]=Thread.start(url,int){|url,int|txt='';t=Time.now
ErrConHttp if(e=IC.call(IOA,serv,80,'','',3,1,0))==0
f=IOU.call(IOA,url,nil,0,0,0)
HQI.call(f,5,k="\0"*1024,[k.size-1].pack('l'),nil)
@read[fich],@size[fich]=0,k.delete!("\0").to_i
loop do
buf,n=' '*1024,0
r=IRF.call(f,buf,1024,o=[n].pack('i!'))
n=o.unpack('i!')[0]
break if r&&n==0
@read[fich]=(txt<
end
(File.open(int+fich,'wb')<
@dloaded+=@read[fich]
ICH.call(f)
@tps[fich]=Time.now-t
sleep(0.001)}
end
end
end
Script:XP
- Spoiler:
- Código:
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Download & Upload Files with RGSS
# par berka v 2.1 rgss 1
# http://www.rpgmakervx-fr.com
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# thanks to: http://www.66rpg.com for documentation on wininet
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# ! do not use ftp which contains privates data
# ! this scripts need ftp account information !
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Ftp :
# â–¼ receive :
# Net::Ftp.download("dir_on_ftp/file.zip","./Graphics")
# â–¼ send :
# Net::Ftp.upload("./Graphics/file.zip","/dir_on_ftp/file.zip")
# â–¼ make directory :
# Net::Ftp.mkdir("/dir_on_ftp")
# Http :
# â–¼ receive :
# Net::Http.download("url","./Graphics")
# â–¼ total octets downloaded :
# Net::HTTP.dloaded
# â–¼ size of file :
# Net::HTTP.size("test.zip")
# â–¼ % dl progress :
# Net::HTTP.progress("test.zip")
# â–¼ transfer time:
# Net::HTTP.temps("test.zip")
# â–¼ list files :
# Net::HTTP.transfers
# â–¼ file loaded? :
# Net::HTTP.loaded?("test.zip")
# â–¼ octets transfered :
# Net::HTTP.transfered
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
module Berka
module NetError
ErrConIn="Unable to connect to Internet"
ErrConFtp="Unable to connect to Ftp"
ErrConHttp="Unable to connect to the Server"
ErrNoFFtpIn="The file to be download doesn't exist"
ErrNoFFtpEx="The file to be upload doesn't exist"
ErrTranHttp="Http Download is failed"
ErrDownFtp="Ftp Download is failed"
ErrUpFtp="Ftp Upload is failed"
ErrNoFile="No file to be download"
ErrMkdir="Unable to create a new directory"
end
end
module Net
W='wininet'
SPC=Win32API.new('kernel32','SetPriorityClass','pi','i').call(-1,128)
IOA=Win32API.new(W,'InternetOpenA','plppl','l').call('',0,'','',0)
IC=Win32API.new(W,'InternetConnectA','lplpplll','l')
print(Berka::NetErrorErr::ConIn)if IOA==0
module FTP
FSCD=Win32API.new(W,'FtpSetCurrentDirectoryA','lp','l')
FGF=Win32API.new(W,'FtpGetFileA','lppllll','l')
FPF=Win32API.new(W,'FtpPutFile','lppll','l')
FCD=Win32API.new(W,'FtpCreateDirectoryA','lp','l')
module_function
def init
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
ftp="ftp.server.com" #
port=21 # A modifier !
identifiant="user" #
motdepasse="password" #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
@fb=IC.call(IOA,ftp,port,identifiant,motdepasse,1,0,0)
ftp,port,identifiant,motdepasse=[nil]*4 # efface les ids par sécurité
(print(Berka::NetError::ErrConFtp))if @fb==0
end
def download(ext,int='./')
init if @fb.nil?
c=ext.split('/').pop
if FSCD.call(@fb,ext.gsub(c,''))!=0
print(Berka::NetErrorErr::ErrDownFtp)if FGF.call(@fb,c,"#{int}/#{c}",0,32,2,0)==0
else
print(Berka::NetErrorErr::ErrNoFFtpIn)
end
end
def mkdir(rep)
init if @fb.nil?
print(Berka::NetErrorErr::ErrMkdir)if FCD.call(@fb,rep)==0
end
def upload(int,ext)
init if @fb.nil?
if FSCD.call(@fb,ext)&&File.exist?(int)
print(Berka::NetErrorErr::ErrUpFtp)if FPF.call(@fb,int,ext,2,0)==0
else
print(Berka::NetErrorErr::ErrNoFFtpEx)
end
end
end
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
module HTTP
IOU=Win32API.new(W,'InternetOpenUrl','lppllp','l')
IRF=Win32API.new(W,'InternetReadFile','lpip','l')
ICH=Win32API.new(W,'InternetCloseHandle','l','l')
HQI=Win32API.new(W,'HttpQueryInfo','llppp','i')
module_function
def sizeloaded(i='');@read[i];end
def transfered;@dloaded;end
def transfers;@dls;end
def progress(i='');(@read[i].to_f/@size[i]*100);end
def loaded?(i='');@read[i]>=@size[i]rescue nil;end
def temps(i='');@tps[i]if loaded?(i);end
def size(i='');@size[i];end
def download(url,int='./')
@dloaded||=0;@dls||={};@i||=-1;@size||={};@read||={};@tps={}
a=url.split('/');serv,root,fich=a[2],a[3..a.size].join('/'),a[-1]
print(Berka::NetErrorErr::ErrNoFile)if fich.nil?
@dls[fich]=Thread.start(url,int){|url,int|txt='';t=Time.now
Berka::NetErrorErr::ErrConHttp if(e=IC.call(IOA,serv,80,'','',3,1,0))==0
f=IOU.call(IOA,url,nil,0,0,0)
HQI.call(f,5,k="\0"*1024,[k.size-1].pack('l'),nil)
@read[fich],@size[fich]=0,k.delete!("\0").to_i
loop do
buf,n=' '*1024,0
r=IRF.call(f,buf,1024,o=[n].pack('i!'))
n=o.unpack('i!')[0]
break if r&&n==0
txt << buf[0,n]
@read[fich]=txt.size
end
(File.open(int+fich,'wb')<
@dloaded+=@read[fich]
ICH.call(f);sleep(0.01)
@tps[fich]=Time.now-t}
end
end
end
Instruções
Ftp :
receive : Net::FTP.download("file_on_ftp","./Graphics")
send : Net::FTP.upload("file_in_project","dir_on_ftp")
Http :
receive : Net::HTTP.download("url","./Graphics")
Instruções em Português
FTP:
receber: o Net:: FTP.download ("file_on_ftp ","./ Graphics")
enviar: Net:: FTP.upload ("file_in_project" dir_on_ftp ")
Http:
receber: o Net:: HTTP.download ("url ","./ Graphics")
O arquivo baixado tem o mesmo nome do original
FAQ
Cole este script acima de main
Compatibilidade
Não há problema eu acho!
Créditos e Agradecimentos
MSDN, o meu melhor ^ ^ amigo
http://www.66rpg.com para peças de scripts!
Notas do Autor
próximo recurso:
avaliar o tamanho do arquivo: feito.
avaliar se o arquivo existe: feito.
Termos e Condições
Livre para usar, mas eu preciso de créditos.
desfrutar,
Berka
Última edição por jiraya em Sex Out 15, 2010 2:21 pm, editado 1 vez(es)