[Tomcat] File na upload niet zichtbaar.

Pagina: 1
Acties:

  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
Een vrij simpele vraag dunkt mij.
Ik heb Tomcat 5.5.12 op een Windows machine geinstalleerd.
Ik heb een FileUpload Servlet gemaakt die m.b.v common-fileupload van apache
een file in een directory van mijn webapplicatie zet.
Deze file moet gelijk gebruikt worden in dezelfde webapplicatie alleen nu het rare.
De file is nog helemaal niet zichtbaar. Als ik in de directory kijk staat de file er netjes.
Kan hem openen en wat niet meer. Als ik via mijn browser in de open dir kijk staat de file er alleen niet. Hij komt er pas te staan na een herstart van Tomcat maar dit is in productie niet wenselijk.
Weet iemand hoe ik dit op kan lossen? Mocht de code van de servlet nodig zijn kan ik die posten.

Twitter @cmeerbeek / Halo Waypoint Profile


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
*kick*

Het probleem doet zich nog steeds voor en een oplossing is nog niet gevonden.
Wie kan mij helpen?

Twitter @cmeerbeek / Halo Waypoint Profile


Verwijderd

wat wil je met de file doen ?

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Het is misschien te simpel, maar heb je al CTRL+F5 gedaan in je webbrowser? M.a.w. weet je zeker dat je niet naar een gecachede pagina zit te kijken?

Siditamentis astuentis pactum.


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
De file wordt geupload om vervolgens toegepast te worden bij een webservice.
Je upload een file. We werken met pc's die bepaalde files moeten hebben.
Via een webpagina koppelen we files aan de pc, komt in een db.
De webservice kijkt in de db en geeft een URL aan de webservice waar de file staat.
Deze kan hem dus niet vinden. Na een herstart van Tomcat wel.
Zodra deze pc zich aanmeldt vraagt hij of er nog files zijn en geeft de evt nieuwe toe.
Dat is de bedoeling. Het werkt voor de oude files maar dus niet voor de nieuwe.
En het gaat dus niet om een pagina maar een ZIP file.

Ik maak gebruik van commons-fileupload 1.1 om de upload af te handelen. Een servlet dus.

[edit]
Omdat ik laatst merkte dat bij een hot-deploy er JAR files bleven staan en het dus niet goed ging
heb ik een context.xml toegevoed.
XML:
1
<Context reloadable="true" antiResourceLocking="true"> </Context>

Misschien dat dit iets is. Ga er iig even naar kijken.

[ Voor 42% gewijzigd door Bbfreak op 16-01-2006 15:11 ]

Twitter @cmeerbeek / Halo Waypoint Profile


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
Na een tijdje met andere projecten bezig te zijn geweest is dit probleem er nog steeds
en loop ik er weer op vast.

Wat dingen die me opvallen tov de vorige x:
  • De upload krijgt altijd een filename met kleine letters :?
  • Als ik getServletContext().getRealPath() gebruik omdat dit misschien beter
    is krijg ik een URL naar een temp directory binne Tomcat die uiteraard niet zichtbaar in de browser is.
Iemand nog suggesties?

Twitter @cmeerbeek / Halo Waypoint Profile


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Bbfreak schreef op vrijdag 13 januari 2006 @ 11:42:
...De file is nog helemaal niet zichtbaar. Als ik in de directory kijk staat de file er netjes.
Kan hem openen en wat niet meer. Als ik via mijn browser in de open dir kijk staat de file er alleen niet. Hij komt er pas te staan na een herstart van Tomcat maar dit is in productie niet wenselijk.
Ik begrijp helemaal niets van je probleem. Je ge-uploade file staat ergens in een directory op je server, zo lees ik. En je kunt de file openen.

Via je (web?)browser kan je die file niet zien? (nee natuurlijk niet daarvoor heb je de explorer toch?)

Als je tomcat herstart staat de file er "opeens" wel? Ik las net dat die er sowieso wel stond, alleen niet zichtbaar op de client-pc.

Ik kan er gewoon geen koffie van maken.


Anyway, in mijn Java/Tapestry-projectje upload ik bestanden met het upload-component van tapestry. Bij de submit van het form wordt de importZip-listener aangeroepen, en dat gaat zo:
code:
1
2
3
4
public void importZip(IRequestCycle cycle) {
   IUploadFile file = getUploadedFile();
   //doe iets met de file
}

Met die file kan ik op de webserver doen wat ik wil. (Uitpakken, weggooien, aan de client laten zien, je kunt het zo gek niet bedenken..)

Siditamentis astuentis pactum.


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
Varienaja schreef op maandag 13 februari 2006 @ 15:06:
[...]

Ik begrijp helemaal niets van je probleem. Je ge-uploade file staat ergens in een directory op je server, zo lees ik. En je kunt de file openen.

Via je (web?)browser kan je die file niet zien? (nee natuurlijk niet daarvoor heb je de explorer toch?)

Als je tomcat herstart staat de file er "opeens" wel? Ik las net dat die er sowieso wel stond, alleen niet zichtbaar op de client-pc.

Ik kan er gewoon geen koffie van maken.
Ik heb een project "blaat" in webapps van Tomcat staan.
Ik heb een upload.jsp die een file op de client pc selecteerd en upload
via commons-fileupload naar de directory Tomcat 5.5\webapps\blaat\upload\scripts\ op de server.
Via Windows Explorer zie ik de file hier idd ook neerkomen.
Als ik nu in een browser naar http://localhost/blaat/upload/scripts/ ga sta krijg ik een dir listing
van Tomcat maar de file die net geupload is staat hier niet tussen.
De file moet gelijk via een andere jsp in project blaat gebruikt worden om gekoppeld
te worden voor gebruik in een webservice. Ik hoop dat het zo iets duidelijker is.
De file moet naar upload gewoon gelijk beschikbaar zijn voor de webapplicatie en de webservice.

De Servlet die de upload afhandelt.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Create a new file upload handler
FileItemFactory factory = new DiskFileItemFactory();            
//Configure the factory if you need to
ServletFileUpload upload = new ServletFileUpload(factory);         

//Parse the request
List items = upload.parseRequest(req);
            
Iterator iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();

    if (!item.isFormField()) {                  
        String fileName = "temp.jpg";
                if(!item.getName().equals(""))
                        fileName = item.getName();
                    
        fileName = "D:\\Program Files\\Tomcat 5.5\\webapps\\blaat\\upload\\scripts\\" + fileName;
                    
        File file = new File(fileName);
        item.write(file);                    
    }
}

[ Voor 49% gewijzigd door Bbfreak op 14-02-2006 10:44 ]

Twitter @cmeerbeek / Halo Waypoint Profile


  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 16-02 22:21

Swaptor

Java Apprentice

De laatste keer dat ik met Tomcat heb gewerkt is al weer ff geleden, maar ik kan me in ieder geval levendig herinneren dat de hot-deploy functionaliteit in de kinderschoenen stond, en het vaker niet dan wel goed werkte.

Wat je waarschijnlijk zelf ook hebt gemerkt is dat er allerhande bestanden bijna random (en hier overdrijf ik een beetje) worden gecached door Tomcat, en dat kennelijk de dir-list niet compleet wordt bijgewerkt.

Ik vrees dat jouw probleem een zelfde oorzaak heeft.
Is het overigens nodig dat het geuploade bestand in de .jar-dir staat?
Het lijkt mij dat, wanneer de geupte file niet in die directory staat er geen probleem moet zijn...

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
De jar dir is Tomcat 5.5\webapps\blaat\WEB-INF\lib en mijn scripts staan in Tomcat 5.5\webapps\blaat\upload\scripts\ en er staat niks in.
Er staat wel een lege txt file in om ervoor te zorgen dat de dir meegenomen wordt met
het ANT build script. Hij moet natuurlijk al wel in de WAR staan.
Ik heb het idee dat commons-fileupload de upload niet goed afsluit maar weet het niet zkr.
Ik weet het nu iig niet meer. Het lijkt me toch niet dat ik de eerste ben die dit gebruikt?

Twitter @cmeerbeek / Halo Waypoint Profile


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 09-04 15:45

bvp

Bbfreak schreef op maandag 13 februari 2006 @ 15:59:
De jar dir is Tomcat 5.5\webapps\blaat\WEB-INF\lib en mijn scripts staan in Tomcat 5.5\webapps\blaat\upload\scripts\ en er staat niks in.
Er staat wel een lege txt file in om ervoor te zorgen dat de dir meegenomen wordt met
het ANT build script. Hij moet natuurlijk al wel in de WAR staan.
Ik heb het idee dat commons-fileupload de upload niet goed afsluit maar weet het niet zkr.
Ik weet het nu iig niet meer. Het lijkt me toch niet dat ik de eerste ben die dit gebruikt?
Je zou dit probleem wel lichtelijk kunnen omzeilen en ik weet niet of dit een mooie workaround zou kunnen zijn voor je.
Is het nl. zo dat hij echt pas NA een herstart van de tomcat server beschikbaar wordt of ook bij het latere oproepen van de file (en dus niet direct)?

In dit geval zou je nl. en de file op kunnen slaan zoals je nu ook al doet en tevens een InputStream van de file terug kunnen geven.
Je kunt deze namelijk heel gemakkelijk opvragen bij een FileItem:

Java:
1
InputStream file = item.getInputStream();


Deze inputStream kun je dus direct in de volgende JSP gebruiken en een keer erop kun je dan gewoon de locatie van het bestand uit de database opvragen.

Ik heb hier overigens ook gebruik van gemaakt en gewoon de hele zooi als CLOB in de database weggeschreven.

  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
bvp schreef op maandag 13 februari 2006 @ 16:15:
[...]


Je zou dit probleem wel lichtelijk kunnen omzeilen en ik weet niet of dit een mooie workaround zou kunnen zijn voor je.
Is het nl. zo dat hij echt pas NA een herstart van de tomcat server beschikbaar wordt of ook bij het latere oproepen van de file (en dus niet direct)?
Nee hij ziet hem pas echt na een restart wat niet grappig is.
Met die InputStream kan ik dus niet heel veel, toch bedankt.

Misschien moet ik ook maar gaan kijken of ik de file in de database kan krijgen.
Het lijkt een simpel probleem dit maar achteraf toch niet.

Wat ik ook d8: Misschien dat Tomcat alleen de files inleest als hij een nieuwe WAR krijgt.
Die zet hij in een soort cache. Die temp directory en van daaruit leest hij snel.
Alles wat daarna aan de map webapps toegevoegd wordt aan een bestaande applicatie ziet
hij gewoon niet meer. Er moet toch wel een work-around zijn?! :'(

Twitter @cmeerbeek / Halo Waypoint Profile


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Bbfreak schreef op maandag 13 februari 2006 @ 15:21:
Als ik nu in een browser naar http://localhost/blaat/upload/scripts/ ga sta krijg ik een dir listing
van Tomcat maar de file die net geupload is staat hier niet tussen.
Nou en. Tomcat is ook niet echt een http-server. Gebruik gewoon dat nieuwe bestand in je .jsp's, misschien zie je 'm dan wel niet in de webbrowser; het gaat erom dat je in Java-code erbij kunt! En dat kan je ook.

Siditamentis astuentis pactum.


Verwijderd

Is het niet mogelijk om de cach leeg te gooien?
Het probleem met cach doet zich naar mijn idee op meer plaatsen voor ik heb namelijk een pagina die controleerd op welke dag van de week is. Maar deze schakeld pas om 9 uur om

  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
Varienaja schreef op maandag 13 februari 2006 @ 17:03:
[...]
Nou en. Tomcat is ook niet echt een http-server. Gebruik gewoon dat nieuwe bestand in je .jsp's, misschien zie je 'm dan wel niet in de webbrowser; het gaat erom dat je in Java-code erbij kunt! En dat kan je ook.
Ik heb de file ook nodig via een webservice die de file via HTTP download.
Hij moet dus wel degelijk zichtbaar zijn in de browser, anders is hij ook niet beschikbaar
in de webservice.

Ik heb nu 2 opties:
  1. Bekijken caching opties Tomcat
  2. Een hele andere weg inslaan. Bijv. opslaan files in db.
Zie ik wat over het hoofd. let me know.

[edit]
Opgelost ik moet de fout zoals gewoonlijk bij mezelf zoeken :*)
Heb code nu:
Java:
1
fileName = getServletContext().getRealPath("/") + "upload\\scripts\\" + fileName;


Toen was de upload zichtbaar maar toen was hij altijd lowercased.
Schijnt een bug in commons-fileupload 1.1 te zijn. Heb nu SNAPSHOT 1.2 en die werkt goed.
Bedankt voor alle tips iig.

[ Voor 22% gewijzigd door Bbfreak op 14-02-2006 10:42 ]

Twitter @cmeerbeek / Halo Waypoint Profile

Pagina: 1