22 messaggi dal 17 luglio 2006
Ciao...
esiste un modo per fare un upload di un file sul server ma in maniera trasparente all'utente?
Riesco a fare tranquillamente l'upload,ma ogni volta mi richiede il file da caricare...e siccome il file è sempre quello vorrei riuscire a non dover scegliere sempre il file ma uploadarlo in modo automatico.

Grazie mille...ciao ciao
Puoi farlo, ma le modalità dipendono dallo script che usi per fare l'upload.

Alberto Biancardo
22 messaggi dal 17 luglio 2006
Grazie per la risposta!!!

Nel form che dovrei rendere trasparente uso il tag

<input type="file" nome = "blob" >

e passo il form alla pagina upload.asp:



<%
Dim folder
folder = "\prova\amici"
Response.Expires=0
Response.Buffer = TRUE
Response.Clear

Sub BuildUploadRequest(RequestBin)
  PosBeg = 1
  PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
  boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
  boundaryPos = InstrB(1,RequestBin,boundary)
    Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
    Dim UploadControl
    Set UploadControl = CreateObject("Scripting.Dictionary")
    'Get an object name
    Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
    Pos = InstrB(Pos,RequestBin,getByteString("name="))
    PosBeg = Pos+6
    PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
    Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
    PosBound = InstrB(PosEnd,RequestBin,boundary)
      If  PosFile<>0 AND (PosFile<PosBound) Then
      PosBeg = PosFile + 10
      PosEnd =  InstrB(PosBeg,RequestBin,getByteString(chr(34)))
      FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
      UploadControl.Add "FileName", FileName
      Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
      PosBeg = Pos + 14
      PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
      ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
      UploadControl.Add "ContentType",ContentType
      PosBeg = PosEnd + 4
      PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
      Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
      Else
      Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
      PosBeg = Pos + 4
      PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
      Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    End If
    UploadControl.Add "Value" , Value  
    UploadRequest.Add name, UploadControl  
    BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
  Loop
End Sub

Function getByteString(StringStr)
 For i = 1 to Len(StringStr)
   char = Mid(StringStr,i,1)
  getByteString = getByteString & chrB(AscB(char))
 Next
End Function

Function getString(StringBin)
 getString =""
 For intCount = 1 to LenB(StringBin)
  getString = getString & chr(AscB(MidB(StringBin,intCount,1))) 
 Next
End Function

byteCount = Request.TotalBytes

RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")

BuildUploadRequest  RequestBin

contentType = UploadRequest.Item("blob").Item("ContentType")
filepathname = UploadRequest.Item("blob").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("blob").Item("Value")

'Create FileSytemObject Component
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

'Create and Write to a File
Set MyFile = ScriptObject.CreateTextFile(Server.mappath(folder)&"\"&filename)
 
For i = 1 to LenB(value)
  MyFile.Write chr(AscB(MidB(value,i,1)))
Next
 
MyFile.Close
%>


Se hai qualche consiglio...grazie mille!!!!
Ciao.

Giusto per cambiare il meno possibile lo script, perchè non provi al posto dell' <input type="file" nome = "blob" > a mettere una hidden oppure a passare direttamente dalla textbox un valore con il nome del file da uploadare?

Alberto Biancardo
22 messaggi dal 17 luglio 2006
biank ha scritto:
Ciao.

Giusto per cambiare il meno possibile lo script, perchè non provi al posto dell' <input type="file" nome = "blob" > a mettere una hidden oppure a passare direttamente dalla textbox un valore con il nome del file da uploadare?



Provato già entrambi...sia aggiungere hidden,
<input type="hidden/file" nome="blob" value="percorso file da caricare">

sia a usare una textbox e impostare value="percorso file da caricare"...

Il problema che qnd manda i dati in entrambi i casi mi viene mostrato a video:


Errore di run-time di Microsoft VBScript error '800a004c'

Impossibile trovare il percorso

/prova/Amici/upload.asp, line 85



la riga incriminata è qst:
Set MyFile = ScriptObject.CreateTextFile(Server.mappath(folder)&"\"&filename)

Eppure se lascio tutto com'è l'upload funziona perfettamente...
Mi dispiace ma quello che vuoi fare non è possibile. Aggiungo "per fortuna!": hai idea delle implicazioni sulla sicurezza che comporterebbe? Senza che l'utente se ne accorga potrei prelevare dal suo client ogni file che desidero (a patto di conoscerne il percorso).

Quindi:

1) non puoi preimpostare il valore dell'input file (è in sola lettura)
2) non puoi sostituire il campo input file con altro (hidden, text, ecc) perché... non sono la stessa cosa! L'input file visualizza il nome del file ma "contiene" e invia *tutto* il file (binario), quindi nulla da fare.

L'unica soluzione per evitare all'utente di selezionare manualmente il file è quella di realizzare un activeX (è un bel po' di codice da scrivere...) e sperare che i tuoi utenti lo installino... sulla fiducia!

Dimenticavo: lo script che stai usando per gestire l'upload lato server è un po' vecchiotto e limitato (lento, un solo file in upload per form, ecc.)
Ti consiglio di scaricarti e usare questo: ASP Upload
Modificato da m.casati il 12 settembre 2006 12.19 -

Matteo Casati
GURU4.net
22 messaggi dal 17 luglio 2006
Grazie della risposta....
quindi la strada che sto percorrendo è un po' troppo incasinata dici?
Allora...mi avevano detto tempo fa che c'è un componente COM che permette il passaggio dei dati da client a server con il metodo GET,non so se ne hai mai sentito parlare...

Se si...dici che potrebbe fare al caso mio?E dove potrei trovarlo?
Grazie mille!!!
sammy286 ha scritto:
c'è un componente COM che permette il passaggio dei dati da client a server con il metodo GET,non so se ne hai mai sentito parlare...


No, non conosco quel componente ma dubito possa fare al caso tuo usando come metodo di invio dei dati "GET" (passare un file via querystring è impensabile)

Non so cosa fa la tua applicazione ma nel 99% dei casi la soluzione migliore è che sia l'utente a selezionare (manualmente) il file da uploadare...

Matteo Casati
GURU4.net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.