Någon som enkelt kan förklara vad streama betyder och när det ska användas? Är inte distillern den del som skapar PDF... Tanken är att detta ska användas på ett intranät, där en del datorer har Distillern men de allra flesta bara Readern. Det låter som filen inte stängts ordentligt innan du försöker anropa den. Det kan inte vara så att destillern inte hunnit göra klart filen? Du kan ju testa det genom att kontrollera om filen ligger där (på webbservern) samtidigt som du kör. PDF-filerna skapades i december...:-) Fast det är klart, att när jag surfar från en dator med Distiller installerad så försöker "han" ju öppna filen igen... kan felet ligga där? Sätt Tack för tipset! Ska testa senare... Har testat med 1 i stället för konstanten - hjälper inte! Får samma fel som när jag remmar den raden... Godmorgon solstråle. Gissar att det beror på att du använder / istället för \ när du försöker öppna din stream. Har misat Request.Gorm. ;o) Variabeldeklarationen och Option Explicit hade jag själv gjort under tiden, dessutom testat att rätt sökväg till filen skapas, vilket inte skedde, varför jag lade till "\" och nu blev det korrekt. Ser lite skumt att du deklarerart lngFileSize två gånger. Jag har nu tänkt om enligt Andras senaste förslag - det verkar för mig också en trolig lösning... Jag som missade att ta bort MapPath. Det var inte det enda du glömde... ;-) Även dim RitningsNr var bra att lägga dit... "utbweb.boras.office.se/ludde" är PDF-filerna som skall visas tomma ? Nej filerna är inte tomma - det är verkliga pdf-filer. Molle - fick du verkligen upp något? Ja, ser ett par datorer och så står det "Lifebook". Men det är ju rätt!!!!!!!!!!!!!!!!!! Det visade sig efter lite efterforskning att mitt problem är lokalt... Andra kan se allt korrekt men inte jag... Överlämnat åt tekniker!Streama?
Jag ställde en fråga här före jul - [Öppna .pdf-fil utan klick] - betr att visa pdf-filer utan att klicka på en länk. Med den lösningen som jag fick så får jag felmeddelandet
ADODB.Stream (0x800A0BBA)
File could not be opened.
/ludde/blank.asp, line 17
där rad 17 är just kommandot för att öppna.
Dock gäller det inte på alla datorer. Jag trodde först att det berodde på om man har Distiller installerad eller inte, men icke...Sv: Streama?
Är verkligen Acrobat installerad på alla datorer?Sv: Streama?
Jag har testat att köra från båda varianterna.
Alltså minst Readern finns på alla..
Länken om du vill testa...
utbweb.boras.office.se/ludde
Nu när jag testade fick jag beskedet att filen inte kan öppnas...
Vore mycket tacksam om något kan hjälpa mig reda ut detta för just nu vet jag knappt vad jag gör :-)...Sv: Streama?
Om så är fallet, gör en loop där du tillåter det felet x gånger samtidigt som du försöker presentera dokumentet - då kanske du får de extra sekunder som destillern behöver för att göra klart pdf-filen.
Felmeddelandet pekar i alla fall på att filen för tillfället är öppen, så du får försöka finna vad felkällan kan vara, om det är destillern som inte släppt filen eller om något annan rutin ligger och håller denna fil öppen.Sv: Streama?
Här kommer hela koden
<code>
<%
response.buffer = true
if request.form("txtritningsnr") > "" then
'Här ligger alla .pdf-filer
Const PATH = "./ritningar/"
'Här hämtar vi numret...
sida = request.form("txtritningsnr")
'Här skapar vi rätt sökväg till filen
strSida = path & sida & ".pdf"
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
'Med denna rad icke-remmad får jag felmeddelandet
'Arguments are of the wrong type, are out of acceptable range,
'or are in conflict with one another.
'objStream.Type = adTypeBinary '<--- OBS
'ta fram sökvägen till filen som skall öppas
'Felmeddelande på nedanstående rad: File could not be opened
objStream.LoadFromFile strSida '<--- OBS
'** ta sedan fram storleken på den med FSO
fil = server.mappath(".") & strSida
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set File = objFSO.GetFile(fil)
strFileSize = file.Size
Set File = Nothing
Set objFSO = Nothing
'ta fram vilken typ av file det är och bestäm Contentype
Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case Else
'** alla andra filer
ContentType = "application/octet-stream"
End Select
Response.AddHeader "Content-Disposition", "attachment; filename=000" & strFileName
Response.AddHeader "Content-Length", strFileSize
Response.Charset = "UTF-8"
Response.ContentType = ContentType
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing
'Här ska vi åka iväg...
response.redirect(strsida)
end if
%>
</code>
Jag har alltså - tyvärr - gjort detta enligt papegojmetoden, d v s bara kopierat utan att förstå vad jag gör! Då går det som det går... :-)Sv: Streama?
'objStream.Type = adTypeBinary'
till
'objStream.Type = 1'
Kan det funka. Det här med Stream och ladda in och ladda upp gör mig tokig. Det verkar inte finnas någon logik i det. Sv: Streama?
Skönt att jag inte är ensam på att inte begripa... :-)Sv: Streama?
Någon mer som orkar komma med förslag?Sv: Streama?
<code>
<%
Dim strPath
Dim RitningsNr
Const adTypeBinary = 1
Response.Buffer = true
'Här hämtar vi numret...
RitningsNr = ""& Request.Gorm("txtritningsnr")
If Len(RitningsNr) > 0 And InStr(RitningsNr,"\") = 0 Then
'Här ligger alla .pdf-filer
strPath = Server.MapPath("./ritningar/")
'Här skapar vi rätt sökväg till filen
strFileName = RitningsNr & ".pdf"
strSida = strPath & strFileName
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
objStream.Open
'Läser in filen til stream-objektet
objStream.LoadFromFile strSida '<--- OBS
'ta sedan fram storleken på filen
strFileSize = objStream.Size
Response.AddHeader "Content-Disposition", "attachment; filename=000" & strFileName
Response.AddHeader "Content-Length", strFileSize
Response.Charset = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing
'###'Här ska vi åka iväg...
'###response.redirect(strsida)
End if
%>
</code>
Du kan inte göra en Response.Redirect(). Efter som den skickar ett bara et tomt svar med en header som säger asidan tillfäligt är ner använd "denna sidan".
Testa och se om du får samma felmedelande.
Jag har lagt in InStr(RitningsNr,"\") = 0 för att man bara skall komma åt filer i /ritningar/. Annars kan man ange ..\..\Login.asp eller något och på så sätt få källkoden till inlogningssidan. Eftersom du lägger till .pdf på RitningsNr tror jag inte det är så kinkigt. Men bäst att vara på den säkra sidan.
Om RitningsNr bara skall vara numerisk. Så kan du ersätta:
<code>
If Len(RitningsNr) > 0 And InStr(RitningsNr,"\") = 0 Then
</code>
Med:
<code>
If IsNumeric(RitningsNr) Then
</code> Sv: Streama?
Har deklarerat alla variabler och lagt till Optione explicit. Du bör inte ha någon mer kod på sidan än denna:
<code>
<%
Option Explicit
Dim strPath
Dim strSida
Dim strFileName
Dim lngFileSize
Dim RitningsNr
Dim objStream
Const adTypeBinary = 1
Response.Buffer = True
Response.Clear
'Här hämtar vi numret...
RitningsNr = "" & Request.Form("txtritningsnr")
If Len(RitningsNr) > 0 And InStr(RitningsNr, "\") = 0 Then
'Här ligger alla .pdf-filer
strPath = Server.MapPath("./ritningar/")
'Här skapar vi rätt sökväg till filen
strFileName = RitningsNr & ".pdf"
strSida = strPath & strFileName
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
objStream.Open
'Läser in filen til stream-objektet
objStream.LoadFromFile strSida '<--- OBS
'ta sedan fram storleken på filen
lngFileSize = objStream.Size
Response.AddHeader "Content-Disposition", "attachment; filename=000" & strFileName
Response.AddHeader "Content-Length", lngFileSize
Response.Charset = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing
End If
Response.End
%>
</code>Sv: Streama?
So far so good...
Nu har jag kompletterat med Andreas senaste (inte sista hoppas jag!) ändringar men också tagit bort mina kommentarer för att korta koden i nuläget...
Men icke... fortfarande samma resultat!
<code>
<% option explicit
dim strPath, strFileName, strSida, lngFileSize, RitningsNr, lngFileSize, objStream
Const adTypeBinary = 1
response.buffer = true
response.clear
RitningsNr = "" & request.form("txtritningsnr")
if len(ritningsNr) > 0 and InStr(RitningsNr,"\") = 0 then
strPath = server.MapPath("./ritningar/")
strFileName = ritningsnr & ".pdf"
strSida = strpath & "\" & strFileName
'response.write strsida
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
objStream.Open
objStream.LoadFromFile strSida
lngFileSize = objStream.Size
Response.AddHeader "Content-Disposition", "attachment; filename=000" & strFileName
Response.AddHeader "Content-Length", lngFileSize
Response.Charset = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing
'response.redirect(strsida)
end if
response.end
%>
</code>Sv: Streama?
Men du kan ju göra en betydligt enklare lösning:
<code>
<%
Option Explicit
Dim strPath
Dim strSida
Dim strFileName
Response.Buffer = True
Response.Clear
RitningsNr = "" & Request.Form("txtritningsnr")
If Len(RitningsNr) > 0 And InStr(RitningsNr, "\") = 0 Then
'Här ligger alla .pdf-filer
strPath = Server.MapPath("./ritningar/")
'Här skapar vi rätt sökväg till filen
strFileName = RitningsNr & ".pdf"
strSida = strPath & strFileName
Response.Redirect strSida
End If
Response.End
%>
</code>
Borde nog fungera i ditt fall.Sv: Streama?
Jag har lagt in hans kod - och dessutom deklarerat RitningsNr... :-) samt kompletterat med den extra \ i sökvägen. Jag har kontrollerat att rätt fil hittas men sedan blir det fel igen...
<code>
<%
Option Explicit
Dim strPath
Dim strSida
Dim strFileName
Dim RitningsNr
Response.Buffer = True
Response.Clear
RitningsNr = "" & Request.Form("txtritningsnr")
If Len(RitningsNr) > 0 And InStr(RitningsNr, "\") = 0 Then
'Här ligger alla .pdf-filer
strPath = Server.MapPath("./ritningar/")
'Här skapar vi rätt sökväg till filen
strFileName = RitningsNr & ".pdf"
strSida = strPath & "\" & strFileName
response.write strSida
'Response.Redirect strSida
End If
Response.End
%>
</code>
När jag plockar bort ' före response.redirect så händer ingenting - inte ens innehållet i strSida visas...
Kan det vara så att det är någon som måste ändras på webbservern? För detta ska väl gå??????
Verkar vara ett litet problem men jag klarar inte ut det - trots hjälpen...Sv: Streama?
Prova med:
<code>
<%
Option Explicit
Dim strSida
Dim strFileName
'Här ligger alla .pdf-filer
Const strPath = "./ritningar/"
Response.Buffer = True
Response.Clear
RitningsNr = "" & Request.Form("txtritningsnr")
If Len(RitningsNr) > 0 Then
'Här skapar vi rätt sökväg till filen
strFileName = RitningsNr & ".pdf"
strSida = strPath & strFileName
Response.Redirect strSida
End If
Response.End
%>
</code>Sv: Streama?
Nu har jag kommit en bra bit på väg, inga protester, Acrobat startas, men aj! sedan säger Acrobat att filen är skadad och inte kan repareras.... (tar det aldrig slut!)
Jag tror inte att filen är skadad... men varför säger Acrobat så? På den dator jag kör just nu är hela Acrobat Distiller installerad. Filen är skapad i samma version.
En sista insats? ;-)
Om någon vill kolla är alltså URL:n utbweb.boras.office.se/luddeSv: Streama?
Men många duktiga killar har svarat i detta inlägg som kanske kan hjälpa mig med mitt problem : http://www.pellesoft.nu/development/forum/view.asp?msgid=72042&forumid=1&sum=1Sv: Streama?
Sv: Streama?
Alla tre funkar. Har iofs installerat både Acrobat Reader och Acrobat, om det nu skulle kunna göra nån skillnad, men det verkar för mig otroligt att det skulle ha nåt med det att göra.Sv: Streama?
Varför i .... funkar det inte hos mig då????????
*suckar*....
Det är nog dags att ge upp...
Tack alla som har hjälpt mig!Sv: Streama?
Andreas korta kod utan stream funkar perfekt! Tack Andreas!