Carissimi,
è possibile uploadare file su server esterno tramite http:// e non usare Server.MapPath per quello locale?
Grazie
G.
Carissimi,
è possibile uploadare file su server esterno tramite http:// e non usare Server.MapPath per quello locale?
Grazie
G.
Hai quattro strade:
1.Ti inventi un formato di invio dal Server A Al server B
2.Invii i dati in Xml
3.Invii i dati in formato upload (multipart)
4.Invii al Server B solo i nomi dei files che devi inserire e la loro destinazione.
Il server B guarda quali hanno data diversa da quelli che ha in locale e chiede al server A un file alla volta e lo salva.
Il procedimento più semplice e più efficace è il 4, realizzabile con Microsoft.XMLHTTP
Link di riferimento:
http://www.motobit.com/tips/detpg_uploadvbsie/
Quello che dovrai fare sarà inviare i dati in upload dal server a al b.
Questi saranno i passaggi.
1.Selezione dei files da inviare
2.Creazione della richiesta in formato multipart (http://servlets.com/rfcs/rfc1867.html )
Quindi dovrai leggere i file e creare una stringa da inviare (usa Adodb.stream)
3.Invio con Microsoft.XMLHTTP al Server B in post alla pagina di upload
Sul server B dovrai mettere un upload
Soluzione 4
Questi saranno i passaggi.
Leggi i files da inviare e crei un file xml con NomeFile, Destinazione, Data ultima modifica Lo inivi al server b con Microsoft.XMLHTTP alla pagina riceviListaFile.asp (per esempio)
La pagina riceviListaFile.asp controlla se il file è sul server.
Se il file non è sul server oppure è presente ma la data è cambiata , con Microsoft.XMLHTTP chiede al server A sempre con lo stesso oggetto e lo salva (puoi richiedere diretamente l'url o passare per una pagina)
Ciao e grazie per la risposta,
Tu cosa mi consigli per ovviare al problema?
Devo caricare fil su server esterno per ragioni di dimensioni di upload.
Comunque io posso caricare eventualmente gli script dell'upload sul server esterno.
Ma dato che deve avvenire tutto in area protetta con utilizzo di db access come fa a funzionare sul server esterno, dovrei caricarci anche il db e questo non posso farlo.
Grazie per il tuo aiuto.
Ciao
G.
grazie 1000
per la spiegazione ma per me è complicatissima, i siti che mi hai indicato sono in inglese.
So che chiedo troppo ma non potresti indicarmi i passaggi eventualmente creando delle pagine di esempio?
Grazie
G.
Leggi i files sul server A da inviare al server B e crei un file xml con, ad esempio, NomeFile, Destinazione, Data ultima modifica.
Lo invii al server B, con Microsoft.XMLHTTP, alla pagina InviaFiles.asp
Dovrai caricare la pagina InviaFiles.asp sul server B e sarà questa che andrà a leggere la lista dei files inviata.codice:<% 'lista dei file da inviare al server B Function GetListFolder(Path,Dest) Dim File,Res Path = Server.MapPath(Path) Set Fso = Server.CreateObject("Scripting.FileSystemObject") Set Files = Fso.getFolder(Path).Files For Each File In Files Res = Res & File.Path & ";" & File.DateLastModified & ";" & Dest & VbCrLf Next GetListFolder = Res end function ListaFiles = GetListFolder("/pagine","/public/") response.write(ListaFiles) 'collegamento con SERVER B per invio dati ... Function PostDataToUrl(Url,Buffer,ResponseIsBinary) Dim Http Set Http = Server.CreateObject("Microsoft.XMLHTTP") Http.open "POST",Url,False Http.setRequestHeader "Content-Type","application/x-www-form-urlencoded" Http.Send(buffer) If ResponseIsBinary then PostDataToUrl = Http.ResponseBody Else PostDataToUrl = Http.ResponseText End if Set Http=Nothing End Function Result = PostDataToUrl("http://www.secondoserver.com/inviafiles.asp",ListaFiles,False) Response.Write "Server B = " & Result %>
INVIAFILES.ASP del SERVER B
codice:<% Const TEM = &h01 Const SOF = &hc0 Const DHT = &hc4 Const JPGA= &hc8 Const DAC = &hcc Const RST = &hd0 Const SOI = &hd8 Const EOI = &hd9 Const SOS = &hda Const DQT = &hdb Const DNL = &hdc Const DRI = &hdd Const DHP = &hde Const EXP_ = &hdf Const APP = &he0 Const JPG = &hf0 Const COM = &hfe Const AND_ = " AND " Const OR_ = " OR " Function RSBinaryToString(xBinary) Dim Binary If vartype(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary Dim RS, LBinary Const adLongVarChar = 201 Set RS = CreateObject("ADODB.Recordset") LBinary = LenB(Binary) If LBinary>0 Then RS.Fields.Append "mBinary", adLongVarChar, LBinary RS.Open RS.AddNew RS("mBinary").AppendChunk Binary RS.Update RSBinaryToString = RS("mBinary") Else RSBinaryToString = "" End If End Function Function MultiByteToBinary(MultiByte) Dim RS, LMultiByte, Binary Const adLongVarBinary = 205 Set RS = CreateObject("ADODB.Recordset") LMultiByte = LenB(MultiByte) If LMultiByte>0 Then RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte RS.Open RS.AddNew RS("mBinary").AppendChunk MultiByte & ChrB(0) RS.Update Binary = RS("mBinary").GetChunk(LMultiByte) End If MultiByteToBinary = Binary End Function Dim ByteData,TotalBytes,StrData TotalBytes = Request.TotalBytes ByteData = Request.BinaryRead(TotalBytes) StrData = RSBinaryToString(ByteData) Response.Write StrData Lines = Split(StrData,VbCrLf) For Each Line in Lines Field = Split(Line,";") 'Field(0) è il nome, field(1) è la datamod, field(2) è la dest Next %>
scusate la domanda ...
ma a che serve far tutto sto casino ?
mi spiego meglio se devi cmq mettere sul server B una pagina asp che processi i file si presume che puoi metterci quello che vuoi...
allora perchè non fare una pagina di normalissimo upload da mettere sul server B che venga richiamata dentro un frame di una pagina sul server A e uppi direttamente sul server B pur essendo richiamata sul server A ?
magari ho capito male la necessità ma leggendo mi pare tutto un lavoro enorme e immotivato