Upload mit Persits ASP Upload

nafets

Mitglied
Hallo

Versuche ein Upload Tool einzurichten. Mein Hoster benützt Persits ASP Uploader, habe mir dazu auch die Anleitung auf Persits angeschaut. Die Files funktionieren soweit auch, aber der eigentliche Upload funktioniert irgendwie nicht richtig. Wie muss ich das Zielverzeichnis angeben ?

Im Muster File steht: Count = Upload.Save("c:\upload")
Wenn ich das einfach so stehen lasse, bekomme ich die Meldung dass der Upload erfolgreich war, aber natürlich ist das File nicht in meine Webroot vorhanden. Habe auch schon versucht nur den Ordner ohne Laufwerk einzufügen aber das klappt alles nicht. Das File taucht auf dem Server nicht auf. Bin nach etwas Googlen auf den Begriff Server.MapPath gestossen aber da kommt auch eine Fehlermeldung. Weiss jemand wie ich das einrichten muss?

Gruss
 

Luzie

Erfahrenes Mitglied
Hallo

ich kenne mich mit der aspupload-Komponenten leider nicht aus. Wenn im Manual nichts über eine rel. Pfad steht, dann musst Du einfach mal durchtesten. Mit Sicherheit gibt es da eine Möglichkeit beschreiben. Ob Du mit dem Server.Mappath() weiterkommst, wage ich bei diesen Komponenten zu bezweifeln, denn die Pfadverarbeitung ist wohl in der Komponenten mit verarbeitet.

Bei der ASPsmartupload-Komponente kann man die Pfade so anlegen.

Ersteres Beispiel würde mir jetzt das File in ein 2 Ordner tieferes Verzeichnis im Root des Servers laden.

Das 2. Beispiel beschreibt auch den physikalischen Pfad.

intCount = mySmartUpload.Save("/aspSmartUpload/Upload")
' sample with a physical path
' intCount = mySmartUpload.Save("c:\temp\")

Allerdings sind dort beide Möglichkeiten in den samples angegeben.

Wenn man wirklich im Manual nichts dergleichen beschrieben findet und es echt nicht funktionieren will, würde ich mich an den Support wenden. Naja, oder jemand hier arbeitet mit der Komponenten und kann Dir helfen.
 
Zuletzt bearbeitet:

nafets

Mitglied
Also,
Die Anleitung stimmt, ausprobieren muss man trotzdem ich muss jetzt das Laufwerk angeben. d:\wwwroot\meineSeite\upload dann funktioniert es UND man muss SCHREIBRECHTE haben ! Da kann ich ja noch lange üben .... egal.

Aber jetzt habe ich noch ein anderes Problem. Wie kann ich die Files im Ordner eindeutig kennzeichnen? Habe schon versucht eine eindeutige Auftragsnummer vor das File zu klemmen aber ich kriege das nicht hin. Das komische ist das das Upload File die Formwerte nicht in klassischer Weise entgegennimmt und dann verarbeitet, aber das liegt wahrscheindlich an der Kompnente dass die begreift dass sie alles was vom Formtyp file kriegt speichern muss.

Also das Speichern sieht bei Persits so aus:

Count = Upload.Save("d:\wwwroot\meineSeite\upload\")

Wo oder wie klemme ich da jetzt noch meinen Wert dazwischen habs schon so probiert:

Count = Upload.Save("d:\wwwroot\meineSeite\upload\"" & myANR & "")

Aber das geht nicht. Habs auch schon umgebaut etc. und dem Formular mitgeben hab ich nicht geschnallt. Da der type="file" ja kein value hat was man frisieren könnte.

Weiss da jemand Bescheid ?
 

Luzie

Erfahrenes Mitglied
Wie und ob das nu beim aspupload funktioniert, dass kann ich nicht sagen. Aber sicherlich gibts im Manual einen Punkt, wo nach Existenz des Files abgefragt wird. Dies sind meist die Stellen, die man für solche Änderungen nutzen kann. Bei SoftArtisans und auch bei ASPsmartupload existieren diese Abfragen direkt in der Komponente und sind Teil des Objektes. Bei SA wird eine laufende Nummer vor den Dateinamen gesetzt. Dies wird durch u.g. Programmierung realisiert.

bsp. SA
Code:
	'--- Save the file now. If you want to preserve the original user's filename, use
	'---
	Dim aa, Dateiname,dat_temp, dat_ext, temp2,jj
	aa=split(upl.userfilename,"\")
	Set oFM = Server.CreateObject("SoftArtisans.FileManager")
	If oFM.FileExists(upl.path &"\" & aa(ubound(aa))) Then
	 dat_temp=left(aa(ubound(aa)),len(aa(ubound(aa)))-4)
	 dat_ext=right(aa(ubound(aa)),4)
	 jj=0
	
	 do ' Zahl hinten anhängen
	  jj=jj+1
	  temp2=dat_temp & "_" & jj & dat_ext 
	
	 Loop while oFM.FileExists(upl.path &"\" & temp2)
	 Dateiname=temp2

	 upl.Form("FILE1").SaveAs Dateiname 'wichtigste Funktion
	 textout=textout & "- Datei " & aa(ubound(aa)) &" unter " & Dateiname & " gespeichert<br>"
	else
	 upl.Form("FILE1").Save
	 Dateiname=aa(ubound(aa))
	 textout=textout & "- Datei " & Dateiname &" gespeichert<br>"
	end if

Bei ASPsmartupload gibts auch ein Sample, wo die Existenz des Files abgefragt wird und wo man file.filename durch einen eigenen Namen ersetzen.

Aber es ist wichtig, dass man zuerst einmal den filenamen splittet oder sich der Properties bedient, die die Komponente noch bietet, um auch das korrekte Format zu speichern. Das sind einfach die Stellen, die man in den jeweiligen Scripten suchen und nutzen kann. Diese MÜSSTEN bei kostenpflichtigen Komponenten einfach vorhanden sein.

Code:
	If not file.IsMissing Then
	      '  Save the files with his original names in a virtual path of the web server
	      '  ****************************************************************************
	         file.SaveAs("/aspSmartUpload/Upload/" & file.FileName)
	         ' sample with a physical path 
         ' file.SaveAs("c:\temp\" & file.FileName)

Hat jetzt zwar unmittelbar nichts mit Deinem Problem zu tun, aber ich häng Dir nochmal ein Script an, wo man eine Textdatei mit lfd. Nummer erzeugen kann. Entspr. angepasst kann u.U. für solche Aktionen ganz hilfreich sein.

Code:
  <%@LANGUAGE="VBSCRIPT"%>
  <% option explicit %>
  <% 'Response.buffer = true %>
  <html>
  <head>
      <title>neue Textdatei erzeugen</title>
     
  </head>
  <body>
  <form name="form1" method="post" action="<% = Request.Servervariables("script_name")%>">
    <textarea name="kommentar" cols="50" rows="10" style="border:1px dotted black"></textarea>
    <br>
    <input type="submit" name="go" value="go">
  </form>
  <% 
  
  if Request("Kommentar") <> "" then
  
  dim myPath, path, FolderObject, ListFolder, sAlleDateien
  path = "textdateien" 
  myPath = Server.MapPath(path) 
  Set FolderObject = CreateObject("scripting.FilesystemObject") 
  set ListFolder = FolderObject.GetFolder(myPath) 
  Set sAlleDateien = ListFolder.Files
  
  ' --- Anzahl der im Verzeichnis befindlichen Dateien
  
  dim AnzahlDateien
  AnzahlDateien = sAlleDateien.Count
  
  ' --- Wenn noch keine Datei vorhanden
  
  Dim neuerName
  if anzahlDateien = 0 Then
  neuerName= "00001.txt"
  
  ' --- ansonsten immer um 1 hochzählen der zuletzt eingefügten Datei
  
  dim x, n, f
  else
  x=0
  For each f in listFolder.files 
  n = cint(left(f.name,5))
  if n>x then x = n
  neuerName = right("0000" & (x+1),5) & ".txt"
  next 
  end if
  
  Response.write "Anzahl der vorhandenen Dateien: " & AnzahlDateien & "<br>"
  Dim objTextStream
  Set objTextStream = FolderObject.CreateTextFile _
                              ( _
                              Server.MapPath ("textdateien/" & neuerName & "" ))
  ' --- Einfügen des Textes
  
  Dim strFileContent
      strFileContent = Replace(Request("Kommentar"),vbcrlf,"<br>")
      objTextStream.Write strFileContent
      Response.Write "<br>Die Datei " & neuerName & " wurde erzeugt <br>und beinhaltet folgenden Text:<br><br>"
  	objTextStream.Close
  
  set sAlleDateien = nothing
  Set objTextStream = Nothing
  Set FolderObject    = Nothing 
  Server.Execute "Textdateien/" & neuerName
  end if
  %>
  </body>
</html>
%>
 

nafets

Mitglied
Hey Luzie

Danke für die umfangreiche Antwort. Hab alles ausprobiert aber bin leider noch nicht weiter. Habe einen Teil des Problems gelöst.

Die "billige" Lösung wäre Upload.OverwriteFiles auf False zu setzten. Dann fügt die Komponente automatisch Zahlen hinzu. Funktioniert grundsätzlich aber ich muss das File überspeichern bzw. updaten können. Man könnte es so lösen aber dann habe ich das Problem, dass ich ein riesen Filehaufen habe und nicht weiss welche Files noch verwendet werden und welche einfach nur Platz brauchen.

Hat irgendjemand Erfahrung mit dem PERSITS ASP Upload für normales ASP und nicht .net Ich komme da einfacht nicht weiter -- voll frustrierend.

Zudem kann man ja im Form keine Werte mer übergeben. Habe jetzt meinen eindeutigen Wert via Session übertragen. Aber auch so kann ich den Inhalt dem Dateinamen nicht anfügen. Es will einfach nichts klappen. Das letzte was ich hoffte zu funktioneren war:

Code:
Set File = Upload.Files("FILE1" & Session("upload") & "")

Aber das klappt auch nicht!

HIIILLLLFFFEEE :)
 

Luzie

Erfahrenes Mitglied
Morgen,

noch kurz ein Tipp

Du könntest Dir den Filenamen in eine Datenbank speichern und die Werte mit dem Inhalt Deines Folders, wo die Images liegen vergleichen und diejenigen, die keine Datenbankzuordnung haben, dann löschen.

Naja, aber vielleicht hat noch ja jemand anderes Erfahrungen mit ASPupload.
 

nafets

Mitglied
So habs jetzt hingekriegt. Man mit der Persits Komponente bei uploadden keine Files umbenennen aber man kann diese in derselben Schlaufe kopieren, umbenennden und das Original löschen. Das sieht dann so aus:

Code:
File.Copy("c:\meineSeite\upload/" & myName & File.Ext)
	File.Delete

So wird das File von z.B. agb.doc mit meiner Variable myName ergänzt und sieht dann so aus: 1234agb.doc.

Wie Ihr wollt. Aber ich danke der Luzie für Ihre Inputs ;)

see ya
 

Neue Beiträge