07. november 2004 - 04:37Der er
12 kommentarer og 1 løsning
Ændre uploaded fils navn automatisk
Jeg prøver at få mit script til at uploade en fil.. hvilket den også gør... men vil gerne have at den ændre navnet på filen til det sidste ID i databasen + 1... hvordan gør man det?
<% Dim objMessage Dim rsConfigFile Dim txtFileData
Set objMessage=Server.CreateObject("SCRIPTING.FileSystemObject") Set rsConfigFile=objMessage.OpenTextFile (Server.MapPath("config.txt"))
while not rsConfigFile.AtEndOfStream txtFileData=rsConfigFile.ReadAll wend 'Response.write "txtFileData="&txtFileData&"<br>"
dim LinkMessage LinkMessage = split(txtFileData,"=")
'SET THE PATH OF WHERE TO STORE THE FILES HERE Dim path path = LinkMessage(1) dim upd_doc dim flnam,pth,NewFileName dim flObj,upl dim biData
'Now whatever the admin uploads, we have a preset file name for each of 'them. We now upload this to the specific directory.
set upl = new BinForm upl.Read() upl.Extensions=Array(".htm") 'Response.write "server.mappath(path)="&server.mappath(path)&"<br>" 'Response.write "path="&path&"<br>" upl.Directory=server.mappath(path) upl.Create=false upl.OverWrite=true
set flObj=server.createobject("Scripting.FileSystemObject")
if len(upl.form("flname")) > 0 then
if flObj.FileExists(server.mappath("path"&flnam)) then flObj.DeleteFile(server.mappath("path"&flnam)) end if upl.Save("flname") if upl.Success then Response.Write "<p> <p>The document was successfully updated." else Call ShowErr() end If
set upl=nothing set flObj=nothing
sub ShowErr() Response.Write "There was an error uploading this file. Please try again.<p>Possible causes are:<p>" response.write "<li>File size exceeds 150kb. Please ensure the file you are uploading is lesser than 150 kb.</li></ul><p>" response.write "Possible server causes:<p>" response.write "<ul><li>The directory to which the file is being uploaded does not exist - /includes/sitedocs</li>" response.write "<li>The posted data was not read due to problem with form posting</li></ul><p>" response.write "<input type=""button"" name=""btnBack"" value=""Back"" onClick=""java script:location.href='default.asp';"">" end sub %>
Der er ikke rigtig nogen database Set objMessage=Server.CreateObject("SCRIPTING.FileSystemObject") Set rsConfigFile=objMessage.OpenTextFile (Server.MapPath("config.txt"))
Hvis du laver denne funktion, så skal den kaldes med navnet på den tabel i din database, som skal åbnes og opdateres - eller hvad du nu gør i den OG extension på de filer, du uploader.
Function CreateFileName(tabelname, ext) Dim TName, C, Rs, conn, Rno
'...her skal du skabe din connectionstring (jeg kalder den conn) Set rs = Server.CreateObject("ADODB.Recordset") Rs.Open Tabelname, conn,3 ,3 Rno = Rs.recordcount+1 Rs.Addnew '... hvis der er felter som skal have værdier f.eks Rs("ID") = ?? '... samme Rs.Update Rs.Close Set Rs = Nothing Tname = Trim(CStr(Rno)) While Len(Tname)<8 Do Tname = "0" & Tname Loop CreateFilename = Tname & "." & Ext End function
I dit script kan funktionen så kaldes med noget a la dette:
For each File in Upload.Files
CopyFile "d:\home\ditdomæne\db\upload\" & file.extractFilename, "d:\home\ditdomæne\www\" & CreateFilename("Navn på din databasetabel", "extension til dine uploadede filer jpg eller dat eller doc")
jeg kan bare ikke se hvordan jeg skal sætte det sammen...
hvis nu vi glemmer at jeg har en side som kalder det script øverst... kan du så lave en side som gør det? ...
databasen ligger i samme folder og hedder bare database... og der er et felt som hedder id under tabellen "indhold" .. det er det som access selv generere...
scriptet skal bare give det man uploader navnet på id'en + 1 ...dvs er det sidste id 50 skal billedet man uploader hedde ... 51.jpeg evt
I nedenstående funktion skal du blot selv ændre den præcise sti til databasen og sikre dig at navnet på tabellen er rigtig, så burde du kunne henvise til funktionen, som generere et filnavn til dig.
Function CreateFileName Dim Tname, Rs, conn, Rno, DNS
DNS = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\home\ditdomæne\db\database.mdb;"
Conn.Open DNS Set rs = Server.CreateObject("ADODB.Recordset") Rs.Open "indhold", conn,3 ,3 Rno = Rs.recordcount+1 Rs.Addnew '.... hvis der er flere felter,som skal opdateres Rs.Update Rs.Close Set Rs = Nothing Tname = Trim(CStr(Rno)) While Len(Tname)<8 Do Tname = "0" & Tname Loop CreateFilename = Tname & ".JPEG" End function
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.