PDA

View Full Version : Upload di un file via browser?


mrfusion
01-07-2002, 08:32
E' possibile farlo tramite html, o bisogna usare qualcosa d'altro? javascript? java?

Se si, come?

grazie :)

Kugel
01-07-2002, 10:48
Io sapevo che c' il modo di farlo tramite pagina asp o pagina php.

Tramite il semplice html penso sia letteralmente impossibile.

Quale ti serve ?

mrfusion
01-07-2002, 11:11
Meglio ASP.

PHP non mi va.

Kugel
01-07-2002, 11:31
Ti servono varie pagine ...
allora:

Prima di tutto la pagina html per richiedere il file da "uppare"

<HTML>
<HEAD>
<TITLE>Upload</TITLE>
</HEAD>

<BODY >

<FORM METHOD="Post" ENCTYPE="multipart/form-data" ACTION="outputFile.asp">

File : <INPUT TYPE="file" NAME="blob"><INPUT TYPE="submit" NAME="Enter">

</FORM>

</BODY>
</HTML>
E' un form che rimanda il dato inserito dall'utente al file output.asp ... che poi la pagina ASP che si smazza il lavoro

Kugel
01-07-2002, 11:53
La pagina asp in cui ci sono le funzioni di upload ----> upload.asp

<%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")
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),Requ estBin,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%>

Kugel
01-07-2002, 12:00
Questa invece la pagina asp che veniva caricata dalla pagina html e che ha all'interno l'include per importarsi le funzioni scritte in upload.asp ... si tratta della pagina ---> outputfile.asp

<!--#include file="upload.asp"-->
<%Response.Expires=0
Response.Buffer = TRUE
Response.Clear
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
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
Set MyFile = ScriptObject.CreateTextFile(Left(Server.mappath(Re quest.ServerVariables("PATH_INFO")),pathEnd) & filename)

For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next
MyFile.Close%>

E se tutto va come doveva andare ... viene eseguita anche questa parte di codice html che fa da conferma.
Queste ultime righe sono da scriversi in fondo al file ---> outputfile.asp

<head>
<title></title>
</head>

<body bgcolor="#FFCB8C">

<p align="center"><font face="Verdana" size="2">
File "<b><%=filename%></b>" ricevuto con successo</font>
<p align="center"><font face="Verdana" size="2"><a href="abbapispa.htm">torna</a></font></p>

mrfusion
01-07-2002, 13:48
Questo e' l'errore che mi da:

Errore di compilazione di Microsoft VBScript error '800a03ee'

Previsto ')'

/upload.asp, line 73

BoundaryPos=InstrB(BoundaryPos+LenB(boundary),Re
------------------------------------------------^

Kugel
01-07-2002, 16:51
E' perch andato a capo in automatico il code :D
guarda verso l'ultima riga di upload.asp
dove c' la parola loop
Vedrai che c' un
BoundaryPos=InstrB(BoundaryPos+LenB(boundary), Re
questBin ,boundary)

La stringa di codice
BoundaryPos=InstrB(BoundaryPos+LenB(boundary), RequestBin, boundary)
Solo che il forum la fa andare a capo :D

mrfusion
02-07-2002, 10:48
ehm.. ghghghghgh

mrfusion
02-07-2002, 21:04
cmq non mi va ancora... :gha: ho controllato anche le permission sulla directory di upload e sembrano a posto...

Kugel
03-07-2002, 11:09
che codice errore da ?

mrfusion
03-07-2002, 13:21
page not found.

Kugel
03-07-2002, 13:29
allora guarda bene i nomi dei file :look:
Non che li hai rinominati ... oppure che ho segato a scrivere i nomi dei file all'interno del codice ? :look:

Il controllo facile
guarda tutti i .asp che ci sono nel codice e verifica che i nomi siano quelli che hai usato tu.

Come seconda verifica ... dai un occhio a tutti gli "a capo" :look:

Ti servono i priv di scrittura/lettura/esecuzione ... sicuro che li hai tutti e sono impostati correttamente ?

Tass O Mann
10-07-2002, 19:21
asp mi fa schifo! :p


:look:

mrfusion
12-07-2002, 13:22
Originally posted by Tass O Mann
asp mi fa schifo! :p


:look:

trovami un'altra maniera, allora... :angel: :D

mrfusion
24-07-2002, 14:52
smanettando un po' sul file del polipaccio sono riuscito a farlo funzionare.

poi mi sono detto: "perche' non mettere una limitazione a quello che viene spedito?" ed ho trovato uno script che faceva al caso mio.

non l'avessi mai fatto... non riesco a combinarli. :(

lo script e' questo, pari pari:


<!-- TWO STEPS TO INSTALL UPLOAD FILTER:

1. Copy the coding into the HEAD of your HTML document
2. Add the last code into the BODY of your HTML document -->

<!-- STEP ONE: Paste this code into the HEAD of your HTML document -->

<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!-- Original: ArjoGod, Shauna Merritt -->
<!-- Modified By: Ronnie T. Moore, Editor -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Begin
extArray = new Array(".gif", ".jpg", ".png");
function LimitAttach(form, file) {
allowSubmit = false;
if (!file) return;
while (file.indexOf("\\") != -1)
file = file.slice(file.indexOf("\\") + 1);
ext = file.slice(file.indexOf(".")).toLowerCase();
for (var i = 0; i < extArray.length; i++) {
if (extArray[i] == ext) { allowSubmit = true; break; }
}
if (allowSubmit) form.submit();
else
alert("Please only upload files that end in types: "
+ (extArray.join(" ")) + "\nPlease select a new "
+ "file to upload and submit again.");
}
// End -->
</script>
</HEAD>

<!-- STEP TWO: Copy this code into the BODY of your HTML document -->

<BODY>

<center>
Please upload only images that end in:
<script>
document.write(extArray.join(" "));
</script>
<p>

<form method=post name=upform action="/cgi-bin/some-script.cgi" enctype="multipart/form-data">
<input type=file name=uploadfile>
<p>
<input type=button name="Submit" value="Submit" onclick="LimitAttach(this.form, this.form.uploadfile.value)">
</form>
</center>

<p><center>
<font face="arial, helvetica" size="-2">Free JavaScripts provided<br>
by <a href="http://javascriptsource.com">The JavaScript Source</a></font>
</center><p>

<!-- Script Size: 1.55 KB -->

mrfusion
07-09-2002, 12:57
up

Tass O Mann
22-09-2002, 02:37
Se lo facevi in php, avevi una variabile che determinava la grandezza del file da uppare..

Generalmente non conviene fare i check essenziali per il sito, usando javascript, perch qualche sgherro potrebbe avere il browser mosaic, o peggio IE6 con il javascript disabilitato...

mrfusion
22-09-2002, 21:38
Il problema e':
a) non so nulla di php
b) non liho fatti io, dato che non so nulla nemmeno di javascript :p

Tass O Mann
24-09-2002, 13:40
File form_up.html


<html>
<head>
<title>Upload file</title>
</head>
<body>
<h1>Upload File</h1>
<form enctype="multipart/form-data" method="post" action="upload.php">
<p>File da Uppare <input type="file" name="upfile"><BR>
<input type="submit" name="submit" value="Upload del File"></p>
</form>
</body>
</html>


:silly:

Tass O Mann
24-09-2002, 13:50
File upload.php
(da usare con la versione di php 4.1 almeno, e server web Linux/unix)


<?
//Questa variabile contiene il nome della directory in cui salvare i files
//// RICORDATI LA slash FINALE!!!
$NomeDir = "uploads/" ;

//// Dimensione in byte, in questo caso 1Mb
$dim = 1024000 ;


// Controllo che il form sia stato riempito
if ($_FILES['upfile'] != "")
{
if($_FILES['upfile']['size'] > $dim)
{
die("Seleziona un file pi piccolo di $dim byte!");
}
else
{
copy($_FILES['upfile']['tmp_name'], $NomeDir.$_FILES['upfile']['name'])
or die("Couldn't copy the file!");
}
else
{
die("No input file specified");
}
}

?>
<html>
<head>
<title>Upload eseguito!</title>
<body>
<h1>Complimenti!</h1>
<P>Nome File: <? echo $_FILES['img1']['name'] ?>,<BR>
Grandezza: <? echo $_FILES['img1']['size']; ?> byte.<BR>
Tipo: <? echo $_FILES['img1']['type']; ?>.</p>
</body>
</html>

:drool: