[ASP] Command line resizen van afbeeldingen

Pagina: 1
Acties:
  • 161 views sinds 30-01-2008
  • Reageer

  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
Ik ben bezig met een oplossing voor het volgende.
Op een website moet een plaatje ge-upload worden. Dit is inmiddels mogelijk door een upload script van Crazy Beavers.
Dit plaatje moet geresized worden en gecopieerd naar een andere locatie.
Dit is mogelijk met een command line programma, PVW32Con.exe.
Een bijbehorend bat bestand roept deze exe aan en voert het uit.
Dit werkt prima, maar ik wil het dus laten runnen vanuit ASP.

Ik heb al stevig ge-googled en kwam tot het volgende voorbeeld:

dim oWSH
Set oWSH = CreateObject("WScript.Shell")
oWSH.Run "wscript c:\resize.bat", 1, False
Set oWSH = Nothing


Maar ik krijg dit niet werkend.
Wat zou het probleem kunnen zijn en natuurlijk een mogelijke oplossing?

Thanx

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 10:17

sopsop

[v] [;,,;] [v]

host je de webserver zelf of zit je bij een hosting provider?

Verwijderd

Heeft de Web-User wel de juiste rechten voor het uitvoeren van de Bat - file en de daarin aangeroepen tools?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Wat zijn de fouten die je krijgt? Werkt het gewoon niet? Krijg je errors? Wat doet ie wel? Wat is het verschil met hoe het moet worden? Op deze manier kunnen we je niet helpen.

Programming Beleid - De "quickstart"

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Niet om het een of ander, maar je kan beter op zoek gaan naar een OLE-componentje die dit kan. Als je kan programmeren, kun je dit ook zelf wel in elkaar frommelen in Delphi/C++/whatever.

Probleem bij batch-bestanden is dat de tools die ze aanroepen, out-of-process draaien. Op zichzelf is dat niet zo erg, maar het is minder efficient. Maar veel erger, als 100 gebruikers tegelijk dit doen, krijg je 100 processen op je server die een resize staan te doen. Probeer dan nog maar es bijv in te loggen op die server. Nu kun je dat wel weer oplossen met allerlei houtje-touwtje bedenksels, maar het is geen goed begin, IMPO.

日本!🎌


  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
Ik zal alle bovenstaande vragen even beantwoorden.

Ik host in dit geval zelf, kan dus alles instellen op de server.

Als je met de Web User de gebruiker IUSR_Firewall bedoeld dan heb ik die de juiste rechten gegeven.

De fouten... Als ik inlog op de server en het bat bestandje run dan gaat het allemaal goed.
Als ik bovenstaand script uitvoer dan gebeurt er niks. een response.write werkt wel, maar het bat bestand word niet aangeroepen.

Als laatste, het is de bedoeling dat het script alleen gedraaid word als er een plaatje is ge-upload. dit zal niet dagelijks gebeuren.

Ik sta ook open voor andere opties, maar dit leek mij het makkelijkste omdat ik het resize programma ook vanuit andere applicaties aanroep.

Alvast bedankt voor jullie reacties

Verwijderd

Dan zou ik gewoon een componentje opzoeken.... Vanaf een eurotje of 50 zijn ze wel te krijgen ... en als het voor prive gebruik is weet een tweaker wel andere mogelijkheden...

http://www.aspjpeg.com/ is bijvoorbeeld een aardig component.

De meest uitbereide vind ik CSImage ( http://www.chestysoft.com/imagefile/default.asp )

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 30-01 09:44

Jaspertje

Max & Milo.. lief

Misschien niet helemaal ontopic, maar er zijn .net componenten die kunnen resizen, ik weet niet of je daar iets meer kan naast je ASP..

  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
Er heeft nog niemand gepost wat er nou fout is aan mijn regels code... is het fout of kan dit gewoon niet met asp?

Ik heb hier ook wel een component, maar er zit zo goed als geen documentatie bij, dus ik heb geen idee hoe ik dit kan implementeren.
Het gaat hierbij om GFL.
Ik heb dus op de webserver de GFL SDK geinstalleerd ( http://perso.orange.fr/pierre.g/xnview/engfl.html

hoe kan ik deze componenten gebruiken?

( ik ben nog niet zo lang met ASP bezig)

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
De volgende websites bevatten voorbeelden van hoe je het WShell object kunt gebruiken:
http://www.experts-exchan...uages/ASP/Q_20823318.html (scroll naar de comments onderaan)
en
http://www.4guysfromrolla.com/webtech/102998-1.shtml

  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
bigbeng schreef op woensdag 14 juni 2006 @ 10:58:
De volgende websites bevatten voorbeelden van hoe je het WShell object kunt gebruiken:
http://www.experts-exchan...uages/ASP/Q_20823318.html (scroll naar de comments onderaan)
en
http://www.4guysfromrolla.com/webtech/102998-1.shtml
Bedankt voor de links, bigbeng, maar ik ben geen lid van de bovenste site. Zou jij misschien de bedoelde comments willen copy-pasten?

Ik ben iets verder gekomen door ook op zowel de exe als cmd.exe de IUSR lezen/uitvoer rechten te geven.

Verder vond ik op deze site ook veel nuttige informatie.
http://www.ss64.com/wsh/run.html

Mijn code ziet er nu als volgt uit:

dim oWSH
Set oWSH = CreateObject("WScript.Shell")
oWSH.Run "cmd c:\resize.bat", 1, false
Set oWSH = Nothing

De resize.bat werkt. deze is gewoon vanaf de command line uit te voeren.
Alleen als ik dus de ASP pagina draai dan krijg ik geen foutmelding, gewoon een leeg scherm en de opdracht word niet uitgevoerd...

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

waarom roep je dat cmd ook nog aan? Je hoeft alleen maar je bat.bestand te executen, dat wordt dan vanzelf goed uitgevoerd (verg. een .bat bestand aanroepen vanuit de Windows Verkenners, werkt ook gewoon).

Als je dat cmd dus weglaat aan het begin van je run-instructie, zou het wel eens kunnen werken.

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
wizzkizz schreef op woensdag 14 juni 2006 @ 19:15:
waarom roep je dat cmd ook nog aan? Je hoeft alleen maar je bat.bestand te executen, dat wordt dan vanzelf goed uitgevoerd (verg. een .bat bestand aanroepen vanuit de Windows Verkenners, werkt ook gewoon).

Als je dat cmd dus weglaat aan het begin van je run-instructie, zou het wel eens kunnen werken.
Helaas werkt dit dus ook niet.
Ik krijg geen foutmelding, maar er staan ook geen bestandjes in de doelmap.

Een andere regel die ik op een site tegenkwam:
oWSH.Run("cmd.exe /c dir > toto.txt", 0, true)
Hier staat cmd.exe dus ook expliciet in vermeld...

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Doe eens het volgende:

code:
1
2
3
4
Dim retval
...
retval = oWSH.Run( "cmd c:\resize.bat", 1, true )
Response.Write "retval=" & retval

  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
bigbeng schreef op donderdag 15 juni 2006 @ 11:02:
Doe eens het volgende:

code:
1
2
3
4
Dim retval
...
retval = oWSH.Run( "cmd c:\resize.bat", 1, true )
Response.Write "retval=" & retval
De volgende code:

code:
1
2
3
4
5
Dim retval
Set retval = CreateObject("WScript.Shell")  
retval = oWSH.Run( "cmd c:\resize.bat", 1, true )
Response.Write "retval=" & retval
Set oWSH = Nothing


Levert het volgende resultaat op:

code:
1
2
3
Runtimefout Microsoft VBScript error '800a01a8' 

Object vereist: ''

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Vertel me dat je een tikfout heb gemaakt met het overtypen van je code. Zo niet, lees hem dan nog eens goed door.
edit:
hint: waar wordt oWSH nu nog gedefinieerd?

[ Voor 21% gewijzigd door bigbeng op 15-06-2006 15:10 ]


  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
bigbeng schreef op donderdag 15 juni 2006 @ 15:09:
Vertel me dat je een tikfout heb gemaakt met het overtypen van je code. Zo niet, lees hem dan nog eens goed door.
edit:
hint: waar wordt oWSH nu nog gedefinieerd?
Sorry, tikfout.
Dit is de code:
code:
1
2
3
4
5
6
Dim retval
Dim oWSH
Set oWSH = CreateObject("WScript.Shell")  
retval = oWSH.Run( "cmd c:\resize.bat", 1, true )
Response.Write "retval=" & retval
Set oWSH = Nothing

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
En dit geeft de eerdergenoemde foutmelding? Dat lijkt me namelijk erg stug, gezien de code gewoon klopt.

Verwijderd

Probeer eens een server.createobject ipv createobject

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
ASP:
1
2
3
4
5
6
Dim retval
Dim oWSH
Set oWSH = CreateObject("WScript.Shell")  
retval = oWSH.Run( "cmd /c dir", 1, true )
Response.Write "retval=" & retval
Set oWSH = Nothing


Net even dit uitgevoerd en die geeft braaf retval=0 terug. Ik moest hem wel onder mijn eigen account ipv IUSR_<machinenaam> draaien omdat ik anders onvoldoende rechten had.

  • wboevink
  • Registratie: September 2004
  • Laatst online: 09-02 17:21
IMHO is het een rechten probleem.
check het volgende

IUSR moet rechten hebben op cmd.exe
IUSR moet rechten hebben op de bat file
IUSR moet rechten hebben op de executables in de bat file
IUSR moet rechten hebben op de directory waar de plaatjes instaan
IUSR moet rechten hebben op de directory waar de plaatjes inkomen

Maar ik zou toch voor een component gaan.

  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
Nou, mijn asp bestand gaat in ieder geval zonder foutmeldingen door.
de code ziet er als volgt uit:
code:
1
2
3
4
5
6
Dim retval
Dim oWSH
Set oWSH = server.CreateObject("WScript.Shell")  
retval = oWSH.Run( "C:\resize.bat", 1, true )
Response.Write "retval=" & retval
Set oWSH = Nothing

alleen de fotos worden niet geresized, en ik krijg als reactie:
retval=1
Dus er gaat nog iets fout denk ik.
Wat betreft de rechten, IUSR heeft op alle bovenstaande suggesties nu volledige rechten.

De code van BigBeng geeft wel retval=0 terug.
Dit is de code met "cmd /c dir"

[ Voor 12% gewijzigd door jmderonde op 19-06-2006 14:23 ]


  • jmderonde
  • Registratie: December 2005
  • Laatst online: 15:03
Gasten, allemaal bedankt voor je hulp.
Ik heb het hele gebeuren draaiend.
het is op mijn webserver dus niet mogelijk om een bat bestandje aan te roepen vanuit een .asp bestand.
Ik heb dus de volledige regel van het bat bestand in de cmd regel gezet.
Tevens is het heel belangrijk dat het exe bestand, die dus de conversie uit moet voeren rechten heeft op de twee mappen met bron en destination bestanden.
als je dus het conversie exe bestand opstart vanuit een asp bestand dan gebeurt dat met gebruiker "netwerkservice"
Deze gebruiker moet dus wijzigingsrechten hebben in de afbeeldingmappen.

De oplossing is de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
<%
Dim retval
Dim oWSH
Dim comman
comman = """C:\program files\pvw32con.exe""  D:\inetpub\wwwroot\upload\*.jpg -j --jh --y35 --k --o D:\inetpub\wwwroot\resize\"
Set oWSH = server.CreateObject("WScript.Shell")  
retval = oWSH.Run( comman , 1, true )
Response.Write "Return value= " & retval
Set oWSH = Nothing
%>


De return value is dus 0 en het script word dus uitgevoerd.

Als iemand nog vragen heeft over het gebruikte pvw32con.exe dan hoor ik het wel. er is echt enorm veel mogelijk vandaar mijn keuze voor dit programma!
Pagina: 1