bijlage uploaden via form

52 views
Skip to first unread message

gerard

unread,
Sep 25, 2008, 2:11:12 PM9/25/08
to Smartsite5
Beste allemaal,
ik heb een form to item waarvan een charvarveld is bedoelt om het path
in op te slaan. Via het form wil ik bezoekers de gelegenheid geven een
bijlage (word etc) te kunnen uploaden naar een map en dan dus het path
naar map en filename vastleggen in het metaveld.
Ik gebruik vanuit het form het volgende mij aangereikte script.

<field name="Fileinput">

<libtype fixed="1">BaseLine</
libtype>
<bindto fixed="1">binary</bindto>
<editprogid
fixed="1">SmartUI.FileUpload</editprogid>
<ctrl:filter caption="Filter">*.*</
ctrl:filter>
<ctrl:valuetype fixed="1">1536</
ctrl:valuetype>
</field>

Als het formulier met databinding DefaultDataSource is aangemaakt,
wordt de file standaard in de www/tmp directory weggeschreven.

Dit kan aangepast worden met het volgende script, dat dus aangeroepen
moet worden na de renderform macro:

<se property="Form(Filenaam)" save="filename"/>

<se type="script"criteria="{filename:=}<>''" error="{error}">
Dim sTempDir
Dim sFileName
Dim sFullFileName
Dim sWebpath
sWebpath = Context.Site.FileSystem.WebRootPath
sTempDir = GetTempDirectory()
sFileName = Page.Macrobuffers("filename")
sFullFileName = sTempDir &"upload\" & sFileName
'Verplaatsen naar doel dir
if (ExistsFile(sFullFileName)) then
FileMove sFullFileName, swebpath & " bepaaldeMap\"
end if
</se>

echter krijg ik de foutmelding

update by metaerror: operand and typeclash: image is incompatible with
varchar.

Ik heb ook al de binary in de fileinput verandert, maar dit maakt niet
veel uit.

Daarna een fileinput in form gedaan met databinding dfault source,
toen geen foutmelding, maar nergens een bestand te ontdekken int de
temp map in de root. Kan het nog te maken hebben met een registry
instelling, of heeft iemand hier een tip voor met name mijn form to
item binding en een file uploaden.

alvast dank
gerard

Arjan Gijze

unread,
Sep 26, 2008, 11:08:58 AM9/26/08
to Smartsite5
Gerard,

Wanneer je een form aanmaakt, kun je beter een script maken die binnen
de logic>onbeforesave tags het bestand gaat verplaatsen.

Ik heb jouw script wat aangepast. Ik heb bewust wat debug informatie
toegevoegd. Deze informatie wordt in het description veld van het aan
te maken item gezet. Wanneer je een form aanmaakt met een databinding
naar een contenttype, kun je onderstaande script gebruiken. Met dit
script worden de bestanden in de www\data folder geplaatst. Dit moet
je maar even aanpassen.


<onbeforesave>
<![CDATA[
Dim sTempDir
Dim sFileName
Dim sFullFileName
Dim sWebpath
Dim sDebugText

sWebpath = Context.Site.FileSystem.WebRootPath
sTempDir = GetTempDirectory()
sFileName = form("filename")

sDebugText = "sWebpath: " & sWebpath & vbcrlf
sDebugText = sDebugText & "sTempDir: " & sTempDir &
vbcrlf
sDebugText = sDebugText & "sFileName: " & sFileName &
vbcrlf

if len(sFileName) <> 0 then
sFullFileName = sTempDir & "upload\" & sFileName
sDebugText = sDebugText & "sFullFileName: " &
sFullFileName & vbcrlf

'Verplaatsen naar doel dir
if (ExistsFile(sFullFileName)) then
sDebugText = sDebugText & "move file to: " &
sWebpath & "data\" & vbcrlf
FileMove sFullFileName, sWebpath & "data\"
sDebugText = sDebugText & "file moved to: " &
sWebpath & "data\" & vbcrlf
end if
end if
data("description") = sDebugText
]]>
</onbeforesave>


Succes,
Arjan Gijze

Johan Kanselaar

unread,
Sep 26, 2008, 1:11:31 PM9/26/08
to Smart...@googlegroups.com
Onderstaande van Arjan is een prima tip en goed uitbreiding van het script maar gaat niet je foutmelding oplossen denk ik.
 
Je veld fileinput gaat namelijk binary proberen op te slaan:

<field name="Fileinput">

                                  <bindto fixed="1">binary</bindto>

Wanneer je onder de regel:
               data("description") = sDebugText

de volgende regel toevoegt:
               data("description") = sWebpath & "data\" & sFileName
Hiermee vul je het veld FileInput (wat gekoppeld is aan een VarChar veld in de DB) met een daadwerkelijke varchar (namelijk de locatie plus filenaam waar het geuploade bestand uiteindelijk is opgeslagen) ipv de daadwerkelijk binary data van het bestand. Wat je ook kan doen is het opslaan in de DB in een Binary field. Net zoals het contenttype Binary dat doet. Dan hoef je ook helemaal niet het bestand te verplaatsen omdat het in de DB opgeslagen wordt.
 
Succes!
 
Johan

 
2008/9/26 Arjan Gijze <arjan...@hotmail.com>

gerard

unread,
Sep 27, 2008, 10:35:52 AM9/27/08
to Smartsite5
Dag Arjan en Johan,

heel erg bedankt voor de aangereikte oplossingen. Ik ga ermee aan de
slag.
met groet,
gerard

On 26 sep, 19:11, "Johan Kanselaar" <johankansel...@gmail.com> wrote:
> Onderstaande van Arjan is een prima tip en goed uitbreiding van het script
> maar gaat niet je foutmelding oplossen denk ik.
>
> Je veld fileinput gaat namelijk binary proberen op te slaan:
>
> <field name="Fileinput">
>                                   <bindto fixed="1">binary</bindto>
>
> Wanneer je onder de regel:
>                data("description") = sDebugText
>
> de volgende regel toevoegt:
>                data("description") = sWebpath & "data\" & sFileName
> Hiermee vul je het veld FileInput (wat gekoppeld is aan een VarChar veld in
> de DB) met een daadwerkelijke varchar (namelijk de locatie plus filenaam
> waar het geuploade bestand uiteindelijk is opgeslagen) ipv de daadwerkelijk
> binary data van het bestand. Wat je ook kan doen is het opslaan in de DB in
> een Binary field. Net zoals het contenttype Binary dat doet. Dan hoef je ook
> helemaal niet het bestand te verplaatsen omdat het in de DB opgeslagen
> wordt.
>
> Succes!
>
> Johan
>
> 2008/9/26 Arjan Gijze <arjangi...@hotmail.com>
> > > gerard- Tekst uit oorspronkelijk bericht niet weergeven -
>
> - Tekst uit oorspronkelijk bericht weergeven -
Reply all
Reply to author
Forward
0 new messages