oysteinw Skrevet 25. september 2007 Del Skrevet 25. september 2007 Vil først bare få presisere at jeg ikke er programmerer, og har derfor SVÆRT sparsommelig med kunnskap(er) om dette emnet. Det kan derfor være at jeg bommer med terminologien og/eller dummer meg ut på annet vis...men det får stå sin prøve. Når det er sagt, så er problemstillingen som følger: Jeg har satt opp en index-server som inneholder et arkiv bestående av ca. 36.000 søkbare PDF-dokumenter. For at brukerne skal kunne dra nytte av de indekserte filene (og ikke bare lokal bruker på server), har jeg konfigurert den som en intern webserver hvor jeg har lagt opp en "søkemotor" (basert på html og asp) som bruker serverens lokale index når den søker i PDF-arkivet. Det er altså én html-side hvor man taster inn hva man skal søke etter (query.htm) og én asp-side som henter frem resultatene og lister de opp i en tabell (results.asp). Grunnversjonene av disse ligger tilgjengelig på internett, og er kun blitt modifisert litt etter egne ønsker (primært forandringer ift. grensesnitt osv.). Dette fungerer veldig bra, men det er et aldri så lite problem. Filen results.asp lister jo opp treffene i en tabell bestående av filnavn, opprettet (dato/klokkeslett) og plassering (henvisning til fysisk plassering på server, f.eks. x:\hovedmappe\undermappe1\undermappe1a). Scriptet er laget slik at filnavnene i tabellen automatisk opprettes som linker til selve dokumentet, hvor tanken er at man skal kunne klikke på ønsket fil/dokument og dermed åpnes denne i Acrobat Reader....men: denne linker til lokal plassering på server (x:\hovedmappe\undermappe1\undermappe1a\dokument.pdf) og det fungerer jo dårlig når man aksesserer serveren via. web. Nå har de fleste sikkert skjønt spørsmålet: hvordan kan man gjøre om dette slik at linken endres fra x:\hovedmappe\undermappe1\undermappe1a\dokument.pdf til noe som f.eks. \\servernavn\skjult_share$\undermappe1\undermappe1a\dokument.pdf? Legger ved deler av asp-koden, så kan dere med egne øyne se hvordan det er satt opp: <% ' Denne delen definerer de ulike konfigurasjonsvariablene formscope="/" pagesize = 5000 maxrecords=5000 searchstring=request.form("searchstring") catalogtosearch="Articles" searchrankorder="rank[d]" origsearch=searchstring %> <% ' Denne delen utfører selve forespørselen dim q dim util set q=server.createobject("ixsso.query") set util=server.createobject("ixsso.util") q.query=searchstring q.sortby=searchrankorder q.columns="doctitle, filename, size, write, rank, directory, path" q.maxrecords=maxrecords %> <% ' Denne delen viser resultatene set rs=q.createrecordset("nonsequential") rs.pagesize=pagesize response.write"<p>Ditt søk etter <b>" & origsearch & "</b> ga følgende resultat: " %> <p> <p> <% if rs.recordcount=0 then response.write "ingen treff" if rs.recordcount=1 then response.write "ett treff " if rs.recordcount>1 then response.write(rs.recordcount) & " treff " %> <table border="1" bgcolor="#C0C0C0"><tr><td bgcolor="#ec3f44"><font color="#ffc600"><b>Filnavn</b></td><td bgcolor="#ec3f44"><font color="#ffc600"><b>Opprettet</b></td><td bgcolor="#ec3f44"><font color="#ffc600"><b>Plassering</b></font></td></tr> <% do while not rs.EOF response.write "<tr><td>" & "<a href=" & "'" & rs("path") & "'" & ">" & rs("filename") & "</a>" & "</td><td>" & rs("write") & "</td><td>" & rs("directory") & "</td></tr>" rs.movenext loop response.write "</table>" set rs=nothing set q=nothing set util=nothing %> Håper at dette ikke var altfor krøkkete beskrevet og at de fleste forstår problemet og hva jeg ønsker å oppnå! Lenke til kommentar
ilpostino Skrevet 26. september 2007 Del Skrevet 26. september 2007 du har prøvd å dele pdf-filene på nettverket slik at webserveren får tilganjg til de, ikkesant? Lenke til kommentar
oysteinw Skrevet 26. september 2007 Forfatter Del Skrevet 26. september 2007 du har prøvd å dele pdf-filene på nettverket slik at webserveren får tilganjg til de, ikkesant?9578001[/snapback] Index- og webserver er en og samme maskin...altså ligger pdf-filene på en lokal disk på webserveren. Lenke til kommentar
oysteinw Skrevet 26. september 2007 Forfatter Del Skrevet 26. september 2007 (endret) En liten visualisering av problemstillingen: Som man kan se, henviser linken til lokal/fysisk plassering på serveren...noe som vil fungere dårlig dersom sluttbruker klikker på denne. Her burde det jo heller stått noe sånt som \\servernavn\pdf-arkiv$\2006\juni\mr_scan_1075.pdf Endret 26. september 2007 av oysteinw Lenke til kommentar
backup Skrevet 26. september 2007 Del Skrevet 26. september 2007 (endret) Problemet er vel at pdf-filene ligger utenfor serverområdet (inetpub/wwwroot)på server-maskina. Her er et enkelt eksempel som demonstrer hvordan en pdf-fil utenfor webområdet på server-maskina havner i klientens internet-browser: <% set fs=Server.CreateObject("Scripting.FileSystemObject") 'henter test.pdf som ligger utenfor inetpub/wwwroot set f=fs.GetFile("C:\Documents and Settings\Eier\Skrivebord\Test\test.pdf") 'kopierer til serverområdet i mappen Test f.Copy ("c:\inetpub\wwwroot\Test\Test.pdf") set f=nothing set fs=nothing %> Her kommer test.pdf opp i klientens internett-browser <embed src ="Test\test.pdf" WIDTH = 500 HEIGHT = 500> NB! sørg for at asp-scriptet har skrivetilgang på inetpub/wwwroot/test Dette script kan lett tilpasses til ditt tilfelle, f.eks. med: x = request.form("filnavn") der filnavn inneholder f.eks. "C:\Documents and Settings\Eier\Skrivebord\Test\test.pdf" slik at set f=fs.GetFile("C:\Documents and Settings\Eier\Skrivebord\Test\test.pdf") blir til: set f=fs.GetFile(x) etc. For å hindre at mappa c:\inetpub\wwwroot\Test stadig vokser med filer, kan du med "session end" slette alle pdf-filene den enkelte bruker har brukt i hver session. Du må bare sørge for å gi hver fil et navn som peker på den enkelte bruker, fordi ellers kan en fil bli slettet som en annen bruker også bruker, men som ikke er ferdig med sin session. Endret 26. september 2007 av backup Lenke til kommentar
oysteinw Skrevet 26. september 2007 Forfatter Del Skrevet 26. september 2007 Problemet er vel at...klippe-klippe...9578418[/snapback] Det må da finnes en enklere og mer elegant måte å løse dette på, enn å måtte kopiere/slette filer hit og dit? Det vil vel også ta unødig mye systemressurser når x antall samtidige brukere søker opp og åpner pdf-filer i hytt og gevær? Om man bare kunne greie å gjøre en endring på denne strengen: "<a href=" & "'" & rs("path") & "'" & ">" & rs("filename") & "</a>" ...slik at path'en i linken endres fra d:\osv. til \\servernavn\share$\osv. Lenke til kommentar
backup Skrevet 26. september 2007 Del Skrevet 26. september 2007 Tja, en hver fil du vil hente med html, f.eks. <a href =test.pdf ...>, må vel ligge på området som webserveren betjener, så derfor er vel copy nødvendig enten du liker det eller ikke, gitt at fila i utgangspunktet ligger utenfor området som webserveren betjener og du vil hente den med html. Lenke til kommentar
oysteinw Skrevet 26. september 2007 Forfatter Del Skrevet 26. september 2007 Tja, en hver fil du vil hente med html, f.eks. <a href =test.pdf ...>, må vel ligge på området som webserveren betjener, så derfor er vel copy nødvendig enten du liker det eller ikke, gitt at fila i utgangspunktet ligger utenfor området som webserveren betjener og du vil hente den med html. 9579410[/snapback] Det er altså komplett umulig å lage et sett kommandoer/funksjoner som omtolker eksisterende path fra d:\blabla til \\servernavn\blabla ? Synes det virker rart...men som sagt tidligere; jeg er ingen programmerer. Lenke til kommentar
backup Skrevet 26. september 2007 Del Skrevet 26. september 2007 Et av flere alternativer er at du legger alle partisjonene eller alle mappene der pdf-filene er eller i fremtiden måtte bli lagret (hele eller alle HD'ene?) under serverområdet som webserveren betjener. Da vil brukerne ved hjelp av html (f.eks. <a href = ... >) kunne få pdf-filene direkte opp i adobe reader. Lenke til kommentar
oysteinw Skrevet 27. september 2007 Forfatter Del Skrevet 27. september 2007 Et av flere alternativer er at du legger alle partisjonene eller alle mappene der pdf-filene er eller i fremtiden måtte bli lagret (hele eller alle HD'ene?) under serverområdet som webserveren betjener. Da vil brukerne ved hjelp av html (f.eks. <a href = ... >) kunne få pdf-filene direkte opp i adobe reader.9579656[/snapback] Ja, dette er vel en variant av ditt første forslag...bortsett fra at man her legger filene permanent i c:\inetpub\wwwroot\blablabla, fremfor å flytte dem til og fra iht. brukernes spørringer. Jeg synes fortsatt dette virker som en usmidig og upraktisk løsning...er heller ikke spesiellt lysten på å legge hele arkivet på 36000 innscannede dokumenter på wwwroot på c:, foretrekker å ha dette på en dedikert disk. Snuste litt mer rundt på nettet og fant en funksjon som tilsynelatende skal gjøre det jeg leter etter, men pga. mangelfull kompetanse på programmering generellt (og særlig asp!) er jeg litt usikker på hvordan jeg skal innlemme dette i nåværende script. Kanskje noen kan hjelpe med dette? Dette er hva jeg fant: In order to make hypertext links to each file, the physical file path has to be mapped to a URL, just like Server.MapPath() converted a URL to a physical path. Unfortunately, there is no built-in function for this. Instead, the MapURL() function is defined to map a physical file path back to a URL. <% function MapURL(path) dim rootPath, url 'Convert a physical file path to a URL for hypertext links. rootPath = Server.MapPath("/") url = Right(path, Len(path) - Len(rootPath)) MapURL = Replace(url, "\", "/") end function %> It simply takes the physical path of the web site root directory and strips it from the given path. Then any backslash characters are replaced with forward slashes. Lenke til kommentar
backup Skrevet 27. september 2007 Del Skrevet 27. september 2007 Ja, dette er vel en variant av ditt første forslag...bortsett fra at man her legger filene permanent i c:\inetpub\wwwroot\blablabla, fremfor å flytte dem til og fra iht. brukernes spørringer. Nei du, det var ikke det! I dette forslaget flyttes nemlig filene ikke. Det som var poenget var at ved å gå inn på webserverens administrasjonsside kan man definere hvilke mapper eller partisjoner som skal tilhøre det området som webserveren skal betjene. Dette krever bare noen få tastetrykk på webserverens administrajonsside. Snuste litt mer rundt på nettet og fant en funksjon som tilsynelatende skal gjøre det jeg leter etter, men pga. mangelfull kompetanse på programmering generellt (og særlig asp!) er jeg litt usikker på hvordan jeg skal innlemme dette i nåværende script. Kanskje noen kan hjelpe med dette? Glem det! funksjonen MapURL(path) funker bare hvis fila i path ligger inne i webområdet som webserveren betjener. Hvis f.eks. fila er: C:\Documents and Settings\Eier\Skrivebord\Test\test.pdf (altså utenfor webområdet) da returneres: ettings/Eier/Skrivebord/Test/test.pdf, altså bare tull! Hvis derimot fila er: C:\Inetpub\wwwroot\test\test.pdf (dvs inne i webområdet) da returneres: /test/test.pdf, altså fila's relative adresse i webområdet. Ellers tror jeg du er best tjent med å godta virkeligheten som den er fremfor dette stadige gnålet om at det i asp må da finnes en smartere og enklere løsning på ditt problem. Som allerede forklart: Med html som f.eks. <a href = .... , får du ikke webserveren til å hente filer som ligger utenfor området som den betjener, dette uansett hvilket hokus pokus du finner på i asp-scriptet som f.eks. den MapURL(path) funksjonen du kommer trekkende med. Lenke til kommentar
oysteinw Skrevet 27. september 2007 Forfatter Del Skrevet 27. september 2007 Blablabla...gneldre...blablabla..."9586635[/snapback] For det første; ingen grunn til å hisse seg opp nevneverdig her! Jeg har ved flere anledninger allerede presisert at jeg IKKE er en programmerer, noe som resulterer i at man gjerne må ha ting inn med teskje. At vi i tillegg antakelig har snakket (eller snarere skrevet) litt forbi hverandre, gjør jo ikke saken spesiellt enklere. Jeg har nå fått dette til å fungere fint, og måten det ble gjort på var som følger: Opprettet en ny website i IIS som jeg kallte "PDF-Arkiv" og som hadde et homedirectory som henviste til hovedmappen for arkivet, altså d:\pdf-arkiv. Denne ble gjort tilgjengelig på en annen port enn "Deafult website", siden denne også benyttes til andre formål på serveren...men det er forsåvidt uinteressant i denne sammenhengen. Forøvrig er vel dette delvis hva du også mente jeg måtte gjøre (sit. "(...)definere hvilke mapper eller partisjoner som skal tilhøre det området som webserveren skal betjene"). Deretter tok jeg i bruk vår alles kjære funksjon som jeg "kom trekkende med" i en tidligere post i denne tråden; altså MapURL(). Denne kallte jeg opp i linken til de enkelte pdf-dokumentene på følgende vis: <a href=" & "'" & MapURL(rs("path")) & "'" & ">" & rs("filename") & "</a> Deretter definerte jeg rootPath ="d:\pdf-arkiv", og vips: alt i skjønneste orden, pdf-dokumentene spretter opp som paddehatter. Da er jeg fornøyd, mitt problem ble løst slik jeg hadde håpet...så da skal jeg slutte å "gnåle", hehe... Lenke til kommentar
backup Skrevet 27. september 2007 Del Skrevet 27. september 2007 Forøvrig er vel dette delvis hva du også mente jeg måtte gjøre (sit. "(...)definere hvilke mapper eller partisjoner som skal tilhøre det området som webserveren skal betjene"). Nettopp! Får bare gratulere deg med suksessen, beklager at jeg var litt hard i orda, men jeg kunne ikke dy meg, fordi du ikke forstod mitt poeng, måte på treghet tenkte jeg liksom, men men ... veldig bra at du rapporterte din løsning, den kan jo være av interesse for andre som eventuelt sliter med det samme problemet som du gjorde. Lenke til kommentar
oysteinw Skrevet 28. september 2007 Forfatter Del Skrevet 28. september 2007 Forresten, et lite tilleggsspørsmål: jeg ønsker at pdf-filene skal åpnes i et nytt vindu, og forsøkte meg med å legge til en vanlig target="_blank" i <a href... strengen, men det fungerte dårlig (fikk feilmelding på denne syntaxen). Noen forslag til hvordan det skal gjøres? Det gjelder da fortsatt for denne: <a href=" & "'" & MapURL(rs("path")) & "'" & ">" & rs("filename") & "</a> Lenke til kommentar
backup Skrevet 28. september 2007 Del Skrevet 28. september 2007 Vel, hvis du skal ha pdf-filene til å dukke opp som popup, så har du et eksempel her som du eventuelt kan tilpasse til den der MapURL greia etc: <head> <script TYPE="text/javascript"> function popup(link, vindu) { if (! window.focus)return true; var href; if (typeof(link) == 'string') href=link; else href=link.href; window.open(href, vindu, 'width=700,height=700,scrollbars=yes'); return false; } </SCRIPT> </head> <a HREF="test/test.pdf" onClick="return popup(this, 'notes')">test.pdf</a> Lenke til kommentar
oysteinw Skrevet 3. oktober 2007 Forfatter Del Skrevet 3. oktober 2007 Ny problemstilling: I scriptet er det definert pagesize=5000 og maxrecords=5000, noe som i de aller fleste tilfeller vil være MER enn tilstrekkelig, men "basen" inneholder jo i underkant av 40.000 dokumenter og dersom man søker etter ord som forekommer i fler enn 5.000 av dokumentene, så vil jo ikke disse vises (viser bare de 5.000 første). Jeg forsøkte da å øke pagesize- og maxrecords-variablene til høyere verdier, men da fikk jeg feilmeldinger av typen "Response Buffer Limit Exceeded" og "Execution of the ASP page caused the Response Buffer to exceed its configured limit". Det kunne vel da kanskje vært en løsning å fordele resultat-tabellen over flere sider? Hvordan gjør man i så fall det på en enkel måte? Er også åpen for andre løsningsforslag... Lenke til kommentar
backup Skrevet 3. oktober 2007 Del Skrevet 3. oktober 2007 Den der feilmeldinga her vel ikke så mye å gjøre med selve rs-tabellen, men med respons-bufferen, dvs du sender med response.write for mye til respons-bufferen slik at den blir srengt før den tømmes. Jeg er ikke sikker på om dette funker i ditt tilfelle, men du kan jo prøve med response.buffer = true, response.flush og derpå response.clear. Her er et eksempel som illustrerer rekkefølgen: <% for i = 0 to 100 response.buffer = true repsponse.write i & "<br>" 'sender til respons-buffer repsonse.flush 'sender output øyeblikkelig fra respons-buffer og til html-stømmen repsonse.clear 'tømmer respons-buffer next %> Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå