---
title: "Välja var skapad fil skall sparas."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/149504-välja-var-skapad-fil-skall-sparas"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "devotion"
published: "2006-07-29T11:42:59.000Z"
updated: "2006-08-01T21:16:24.000Z"
replies: 16
views: 461
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/149504-välja-var-skapad-fil-skall-sparas"
---

# Välja var skapad fil skall sparas.

## #1 — devotion, 2006-07-29T11:42Z

Hej!

Jag sitter och håller på med ett script som skall generera en textfil och sprar den på hårddisken.

Hur gör man smidigast för att välja var den skall sparas och vad den skall heta?

Jag tänkte mig som när man tex väljer en fil för uppladdning med:

```
<form id="form1" name="form1" enctype="multipart/form-data" method="post" action="">
  <label>test
  <input type="file" name="file" />
  </label>
</form>
```

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/149504

## #2 — devotion, 2006-07-29T19:51Z

hmmm..

Ingen... ?  :)  

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1845402

## #3 — Quid, 2006-07-29T19:59Z

Vad har du för komponent som ska sköta uppladdningen?

Permalänk: https://www.webforum.nu/p/1845405

## #4 — devotion, 2006-07-29T20:28Z

Njaaaa...  Jag har ingen komponent. Utan bara ett script som genererar en textfil mha data från en databas.

Jag kanske är ute och cyklar...

I nuläget så sätter jag ju en sökväg till en mapp på servern där jag vill att filen ska hamna, och det gör den...

Hmmm.. det kanse behövs en kompont att skicka filen från servern...??

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1845408

## #5 — Quid, 2006-07-30T07:10Z

Vad händer när du trycker på submitknappen? Hur ser den koden ut?

Permalänk: https://www.webforum.nu/p/1845462

## #6 — devotion, 2006-07-30T07:47Z

Hej! :)  

Den kodsnutten ovan var bara ett exempel på filuppladdningsfältet... Bara för att visualisera hur jag ville göra...  Det kanske förvirrade det hela??

Så här ser koden ut i alla fall:

```
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<%
dim objConn, objRS, sSQL, fsObj,tfile, iSupplierId, sUnit, sEndChar, sPath, sFileName

'Sätta leverantörs ID
iSupplierId = 5

sEndChar = "X"
sPath = "/prisfiler/"
sFileName = "Selga - El.txt"

function GetFixedWidthString(stringVal,length)
   GetFixedWidthString=left(stringVal & string(length," "),length)
end function

' Öppna databasen
' ***************
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = Application("sConn")
objConn.Open

set fsObj=Server.CreateObject("Scripting.FileSystemObject")
set tfile=fsObj.CreateTextFile(server.MapPath(sPath & sFileName))

'Skapa huvudet i textfilen
tfile.WriteLine("[HEADER]")
tfile.WriteLine("<Article.Nr>,8")
tfile.WriteLine("<Article.Price>,8")
tfile.WriteLine("<Article.Unit>,5")
tfile.WriteLine("<Article.Name>,50")
tfile.WriteLine("End,1")
tfile.WriteLine("[DATA]")

sSQL = 	"SELECT tblArticle.articlenumber, tblArticle.articleName, tblPrice.articlePrice, tblPrice.articleCategoryNumber, tblArticle.articleUnit, " &_
		"tblCategory.CategoryName, tblCategory.categoryNumber, tblDiscount.articleDiscount, tblSupplier.SupplierName, tblSupplier.SupplierId, " &_
		"CASE WHEN articleDiscount is null THEN articlePrice ELSE articlePrice*(1-([articleDiscount]*0.01)) END AS articlePriceWithDiscount " &_
		"FROM tblArticle " &_
		"INNER JOIN tblPrice ON tblArticle.articlenumber = tblPrice.articleNumber " &_
		"INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId " &_
		"LEFT OUTER JOIN tblDiscount ON tblPrice.articleCategoryNumber = tblDiscount.categoryNumber AND tblPrice.articleSupplierId = tblDiscount.supplierId " &_
		"LEFT OUTER JOIN tblCategory ON tblPrice.articleSupplierId = tblCategory.supplierId AND tblPrice.articleCategoryNumber = tblCategory.categoryNumber " &_
		"WHERE tblSupplier.supplierId = " & iSupplierId & " " &_
		"ORDER BY tblArticle.articlenumber"
		
Set objRS = Server.Createobject("ADODB.Recordset")
objRS.Open sSQL, objConn, 1, 2

'Loopa ut datat från databasen och skriva till textfilen
Do while not objRS.EOF
	
	sArticleNumber = GetFixedWidthString(objRS("articleNumber"), 8)
	dArticlePrice = GetFixedWidthString(cdbl(objRS("articlePrice")), 8)
	sUnit = GetFixedWidthString(objRS("articleUnit"), 5)
	sArticleName = GetFixedWidthString(objRS("articleName"), 50)
	
	sLine = sArticleNumber & dArticlePrice & sUnit & sArticleName & sEndChar
	
	tfile.WriteLine(sLine)
	
	objRS.Movenext 
Loop 

objRS.Close
Set objRS = Nothing

tfile.close
set tfile=nothing
set fsObj=nothing

[b]'Kod för att skicka vidare till den skapade filen[/b]
[b]Response.redirect sPath & sFileName[/b]
%>
<body>
</body>
</html>
```

Tanken är att:
1\. Skapa filen
2\. Skicka besökaren till den skapde filen så den kan hämtas

Det fungerar ju nästan... ;)  

Eftersom det är en textfil så öppnas ju denna i webläsaren...
\-Kan man förhindra detta, så man får upp dialogrutan istället där amn kan välja "spara" eller "öppna"?

\-Även filnamnet blir ju konstigt... Mellansteg blir %20

Hoppas ni förstår...

Mvh
Henrik

Bilagor:

- [Capture_35.jpg](https://www.webforum.nu/a/11542.jpg)
- [Capture_36.jpg](https://www.webforum.nu/a/11543.jpg)

Permalänk: https://www.webforum.nu/p/1845464

## #7 — devotion, 2006-07-31T17:55Z

Hepp! :)  

Fick ett tips om den här koden:

```
<%
If request.Form("supplier") <> "" then

	'Definiera variabler
	dim objConn, objRS, sSQL, fsObj, tfile, iSupplierId, sUnit, sEndChar, sPath, sFileName, sSupplierName, iCounter
	
	iCounter = 0
	
	'Ta emot data
	iSupplierId = cint(request.Form("supplier"))
	
	'Sätta variabler
	sEndChar = "X"
	sPath = "/createTextFiles/filesForPalm/"
	
	'Funktion 
	function GetFixedWidthString(stringVal,length)
	   GetFixedWidthString=left(stringVal & string(length," "),length)
	end function
	
	' Öppna databasen
	' ***************
	Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.ConnectionString = Application("sConn")
	objConn.Open
	
	sSQL = "SELECT supplierName FROM tblSupplier Where supplierId = " & iSupplierId & ""
	Set objRS = objConn.Execute (sSQL)
	
	If not objRS.EOF then
		sSupplierName = objRS("supplierName")
	End If
	
	objRS.Close
	Set objRS = Nothing
	
	sFileName = sSupplierName & " - El.txt"
	
	set fsObj=Server.CreateObject("Scripting.FileSystemObject")
	set tfile=fsObj.CreateTextFile(server.MapPath(sPath & sFileName))
	
	tfile.WriteLine("[HEADER]")
	tfile.WriteLine("<Article.Nr>,8")
	tfile.WriteLine("<Article.Price>,8")
	tfile.WriteLine("<Article.Unit>,5")
	tfile.WriteLine("<Article.Name>,50")
	tfile.WriteLine("End,1")
	tfile.WriteLine("[DATA]")
	
	sSQL = 	"SELECT tblArticle.articlenumber, tblArticle.articleName, tblPrice.articlePrice, tblPrice.articleCategoryNumber, tblArticle.articleUnit, " &_
			"tblCategory.CategoryName, tblCategory.categoryNumber, tblDiscount.articleDiscount, tblSupplier.SupplierName, tblSupplier.SupplierId, " &_
			"CASE WHEN articleDiscount is null THEN articlePrice ELSE articlePrice*(1-([articleDiscount]*0.01)) END AS articlePriceWithDiscount " &_
			"FROM tblArticle " &_
			"INNER JOIN tblPrice ON tblArticle.articlenumber = tblPrice.articleNumber " &_
			"INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId " &_
			"LEFT OUTER JOIN tblDiscount ON tblPrice.articleCategoryNumber = tblDiscount.categoryNumber AND tblPrice.articleSupplierId = tblDiscount.supplierId " &_
			"LEFT OUTER JOIN tblCategory ON tblPrice.articleSupplierId = tblCategory.supplierId AND tblPrice.articleCategoryNumber = tblCategory.categoryNumber " &_
			"WHERE tblSupplier.supplierId = " & iSupplierId & " and tblCategory.categoryNumber = '0101' " &_
			"ORDER BY tblArticle.articlenumber"
			
	Set objRS = Server.Createobject("ADODB.Recordset")
	objRS.Open sSQL, objConn, 1, 2
	
	' Räkneverk
	' *********
	Response.write("<div id=""message"">Vänta, skriver till databasen...</div>")
	Response.write("<div id=""progress""></div>")
	Response.Flush()
	
	Do while not objRS.EOF
		
		' Villkor för att flusha
		' **********************
		iCounter = iCounter +1
		if iCounter mod 10 = 0 then
			Response.write ("<script>document.getElementById(""progress"").innerHTML=""" & iCounter & """;</script>")
			Response.flush
		end if
		
		sArticleNumber = GetFixedWidthString(objRS("articleNumber"), 8)
		dArticlePrice = GetFixedWidthString(cdbl(objRS("articlePrice")), 8)
		sUnit = GetFixedWidthString(objRS("articleUnit"), 5)
		sArticleName = GetFixedWidthString(objRS("articleName"), 50)
		
		sLine = sArticleNumber & dArticlePrice & sUnit & sArticleName & sEndChar
		
		tfile.WriteLine(sLine)
		
		objRS.Movenext 
	Loop 
	
	objRS.Close
	Set objRS = Nothing
	
	tfile.close
	set tfile=nothing
	set fsObj=nothing
	
	response.redirect ("getFile.asp?file=" & sFileName)
Else
	Response.write "Du har försökt göra en otillåten åtgärd!"
End If
%>
```

Mottagande sida:

```
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<%
sFile = request.querystring ("file")

Set objStream = CreateObject( "ADODB.Stream" ) 
objStream.Open objStream.Type = 1 
binary objStream.LoadFromFile server.mappath( "/filesForPalm/" & sFile ) 
Response.ContentType = "application/my-download"
Response.BinaryWrite objStream.Read(-1) 
read all 
Set objStream = nothing 
Response.End 
%>
<body>
</body>
</html>
```

..Men får då följande felmeddelande:

> Response-objekt fel 'ASP 0156 : 80004005'
> 
> Fel på huvuden
> 
> /createTextFiles/createTextFilePalm.asp, rad 106
> 
> HTTP-huvudena har redan skrivits till klientläsaren. Ändringar till HTTP-huvudena måste göras innan sidinnehållet skrivs.

Rad 106 är:

```
response.redirect ("getFile.asp?file=" & sFileName)
```

Vad är fel...

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1845866

## #8 — @nders, 2006-08-01T18:58Z

Du kan inte ha en massa html i sidan. Ta bort allt som inte har att göra med streamingen av filen.

Permalänk: https://www.webforum.nu/p/1846144

## #9 — devotion, 2006-08-01T19:44Z

> **@nders skrev:**
>
> Du kan inte ha en massa html i sidan. Ta bort allt som inte har att göra med streamingen av filen.

Jag testar att ta bort allt annat....  :)  

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1846156

## #10 — devotion, 2006-08-01T19:53Z

Jag testade det, men med samma resultat...   :(  

```
<%
sFile = request.querystring ("file")

Set objStream = CreateObject( "ADODB.Stream" ) 
objStream.Open objStream.Type = 1 
binary objStream.LoadFromFile server.mappath( "/filesForPalm/" & sFile ) 
Response.ContentType = "application/my-download"
Response.BinaryWrite objStream.Read(-1) 
read all 
Set objStream = nothing 
Response.End 
%>
```

> Vänta, skriver till databasen...
> 30
> Response-objekt fel 'ASP 0156 : 80004005' 
> 
> Fel på huvuden 
> 
> /createTextFiles/createTextFilePalm.asp, rad 106 
> 
> HTTP-huvudena har redan skrivits till klientläsaren. Ändringar till HTTP-huvudena måste göras innan sidinnehållet skrivs.

Vad är det för fel?

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1846158

## #11 — @nders, 2006-08-01T19:58Z

rad 106?

du har ju c:a 10 rader i inlägget ovan...

Redigerar du fel fil som vanligt?

Permalänk: https://www.webforum.nu/p/1846159

## #12 — devotion, 2006-08-01T20:02Z

Shut up butt head...  ;)  

Rad 106 är:

```
response.redirect ("getFile.asp?file=" & sFileName)
```

I filen som skapar textfilen....

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1846162

## #13 — @nders, 2006-08-01T20:05Z

Ok....

Man kan inte köra redirect (eller ändra andra headers) om man skrivit saker till webbläsaren. Då får man använda javascript.

Permalänk: https://www.webforum.nu/p/1846164

## #14 — devotion, 2006-08-01T20:10Z

Hmmmm.... ok

Hur gör man då?

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1846167

## #15 — @nders, 2006-08-01T20:33Z

Öh

```
<script>location.href='foobar.asp';</script>
```

Glöm inte att lägga en response.end precis efter, annars körs ju resten av asp-sidan.

Permalänk: https://www.webforum.nu/p/1846172

## #16 — devotion, 2006-08-01T20:37Z

:r  

Jaha det var så du menade.. sorry.... :)  

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1846173

## #17 — devotion, 2006-08-01T21:16Z

Hmmm... efter mycket om och men så fungerar det nu....  :)  

Jag klistrar in koden, så kan ni se hur jag gjort... anmärka på om något är fel.. eller berömma för att det är snyggt.. ;)

Mvh
Henrik

Sida som genererar textfilen:

```
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<%
If request.Form("supplier") <> "" then

	'Definiera variabler
	dim objConn, objRS, sSQL, fsObj, tfile, iSupplierId, sUnit, sEndChar, sPath, sFileName, sSupplierName, iCounter
	
	iCounter = 0
	
	'Ta emot data
	iSupplierId = cint(request.Form("supplier"))
	
	'Sätta variabler
	sEndChar = "X"
	sPath = "/createTextFiles/filesForPalm/"
	
	'Funktion 
	function GetFixedWidthString(stringVal,length)
	   GetFixedWidthString=left(stringVal & string(length," "),length)
	end function
	
	' Öppna databasen
	' ***************
	Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.ConnectionString = Application("sConn")
	objConn.Open
	
	sSQL = "SELECT supplierName FROM tblSupplier Where supplierId = " & iSupplierId & ""
	Set objRS = objConn.Execute (sSQL)
	
	If not objRS.EOF then
		sSupplierName = objRS("supplierName")
	End If
	
	objRS.Close
	Set objRS = Nothing
	
	sFileName = sSupplierName & " - El.txt"
	
	set fsObj=Server.CreateObject("Scripting.FileSystemObject")
	set tfile=fsObj.CreateTextFile(server.MapPath(sPath & sFileName))
	
	tfile.WriteLine("[HEADER]")
	tfile.WriteLine("<Article.Nr>,8")
	tfile.WriteLine("<Article.Price>,8")
	tfile.WriteLine("<Article.Unit>,5")
	tfile.WriteLine("<Article.Name>,50")
	tfile.WriteLine("End,1")
	tfile.WriteLine("[DATA]")
	
	sSQL = 	"SELECT tblArticle.articlenumber, tblArticle.articleName, tblPrice.articlePrice, tblPrice.articleCategoryNumber, tblArticle.articleUnit, " &_
			"tblCategory.CategoryName, tblCategory.categoryNumber, tblDiscount.articleDiscount, tblSupplier.SupplierName, tblSupplier.SupplierId, " &_
			"CASE WHEN articleDiscount is null THEN articlePrice ELSE articlePrice*(1-([articleDiscount]*0.01)) END AS articlePriceWithDiscount " &_
			"FROM tblArticle " &_
			"INNER JOIN tblPrice ON tblArticle.articlenumber = tblPrice.articleNumber " &_
			"INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId " &_
			"LEFT OUTER JOIN tblDiscount ON tblPrice.articleCategoryNumber = tblDiscount.categoryNumber AND tblPrice.articleSupplierId = tblDiscount.supplierId " &_
			"LEFT OUTER JOIN tblCategory ON tblPrice.articleSupplierId = tblCategory.supplierId AND tblPrice.articleCategoryNumber = tblCategory.categoryNumber " &_
			"WHERE tblSupplier.supplierId = " & iSupplierId & " and tblCategory.categoryNumber = '0101' " &_
			"ORDER BY tblArticle.articlenumber"
			
	Set objRS = Server.Createobject("ADODB.Recordset")
	objRS.Open sSQL, objConn, 1, 2
	
	' Räkneverk
	' *********
	Response.write("<div id=""message"">Vänta, skriver till databasen...</div>")
	Response.write("<div id=""progress""></div>")
	Response.Flush()
	
	Do while not objRS.EOF
		
		' Villkor för att flusha
		' **********************
		iCounter = iCounter +1
		if iCounter mod 10 = 0 then
			Response.write ("<script>document.getElementById(""progress"").innerHTML=""" & iCounter & """;</script>")
			Response.flush
		end if
		
		sArticleNumber = GetFixedWidthString(objRS("articleNumber"), 8)
		dArticlePrice = GetFixedWidthString(cdbl(objRS("articlePrice")), 8)
		sUnit = GetFixedWidthString(objRS("articleUnit"), 5)
		sArticleName = GetFixedWidthString(objRS("articleName"), 50)
		
		sLine = sArticleNumber & dArticlePrice & sUnit & sArticleName & sEndChar
		
		tfile.WriteLine(sLine)
		
		objRS.Movenext 
	Loop 
	
	objRS.Close
	Set objRS = Nothing
	
	tfile.close
	set tfile=nothing
	set fsObj=nothing
	%>
	<script>location.href='getFile.asp?file=<% =sFileName %>';</script>
	<%
	Response.End()
Else
	Response.write "Du har försökt göra en otillåten åtgärd!"
End If
%>
<body>
</body>
</html>
```

Sida som visar dialogruta "öppna/Spara fil"

```
<%
sFile = request.querystring ("file")

Set objStream = CreateObject( "ADODB.Stream" ) 
objStream.Open 
objStream.Type = 1 
objStream.LoadFromFile server.mappath( "/createTextFiles/filesForPalm/" & sFile ) 
Response.ContentType = "application/my-download"
Response.AddHeader "Content-Disposition", "attachment; filename=" & sFile &""
Response.BinaryWrite objStream.Read(-1) 
Set objStream = nothing 
Response.End 
%>
```

Permalänk: https://www.webforum.nu/p/1846180

---

Tråden på webben: https://www.webforum.nu/amne/asp/149504-välja-var-skapad-fil-skall-sparas
