Avatar billede mcnovy Nybegynder
17. marts 2008 - 17:40 Der er 17 kommentarer og
1 løsning

bestemme filnavnet når en client skal dl fra server

Hej,

Jeg vil gerne have en upload funktion som finder en værdi fra en mssql (int incrementerende)
og bagefter navngive filen det nummer som den modtager fra DB.

jeg har upload funktionen, så skal bare vide hvordan jeg finder den incrementerede værdi fra databasen.

efter det, så har jeg brug for en download funktion.
og den skal jo så modtage filens placering, plus dens rigtige navn fra databasen..
og der står jeg helt af..

så håber nogen kan hjælpe mig med de 2 ovenstående problemer..

på forhånd tak..
Avatar billede arne_v Ekspert
17. marts 2008 - 17:45 #1
INSERT ...

SELECT SCOPE_IDENTITY()
Avatar billede mcnovy Nybegynder
17. marts 2008 - 17:52 #2
det var hurtigt..

som jeg kan forstå på denne,
så skal jeg gemme oplysningerne i databasen først, og så bagefter kalde SCOPE_IDENTITY() ???

men kan man ikke komme til at risikere at der er flere på samme tid som forsøger at uploade en fil..??

sagt på en anden måde,
kunne du være en anelse mere præcis..? :)
Avatar billede arne_v Ekspert
17. marts 2008 - 18:00 #3
SELECT SCOPE_IDENTITY()

returnerer den sidste identity key for den givne connection d.v.s.:
  - du skal bruge samme connection for INSERT og SELECT
  - der er ingen problemer med flere samtidige brugere
Avatar billede mcnovy Nybegynder
17. marts 2008 - 18:09 #4
ok... fandt bare lidt info på google med at der ikke måtte forekomme flere inserts under SCOPE_IDENTITY()
men der menes så flere insert fra kun een bruger..?

men jeg prøver det..
smid et svar..

har du så også et svar på nummer 2 spørgsmål.. :)
Avatar billede arne_v Ekspert
17. marts 2008 - 18:17 #5
Ja. Flere inserts paa samme connection vil overskrive vaerdien, men man kan godt:
  INSERT ...
  SELECT SCOPE_IDENTITY()
  INSERT ...
  SELECT SCOPE_IDENTITY()

Og svar.

Skal filen serves af ASP.NET eller serves direkte af IIS naar de skal downloades.
Avatar billede mcnovy Nybegynder
17. marts 2008 - 18:39 #6
jeg tænker mere på hvis flere bruger prøver at uploade en fil samtidig, så det vil komme til at se sådanne her ud..

INSERT ..1 //Bruger 1
INSERT ..2 //Bruger 2
SELECT SCOPE_IDENTITY //Bruger 1
resultat "..2"
SELECT SCOPE_IDENTITY //Brguer 2
resultat "..2"

da det er på webhotel, og jeg ikke har så meget kontrol over IIS,
så må det blive ASP.NET
Avatar billede arne_v Ekspert
17. marts 2008 - 18:59 #7
Problemet med 2 brugere haandteres helt automatisk da det som sagt er per connection.

----

Du skal ikke hav ekontrol over IIS for at lade den serve dine filer.

De to modeller er:

1)  du smider filene i samme dir som dine .html og .aspx filer, du laver et link
    <a href="blabla.txt">Bla bla</a>

2)  du smider filerne i et andet dir og laver en download.aspx som kan sende
    en fil, og link bliver nu <a href="download.aspx?file=blabla.txt">Bla bla</a>.
Avatar billede mcnovy Nybegynder
17. marts 2008 - 19:42 #8
filerne skal ligge i et andet dir,
da jeg bruger sikkerheden i ASP.net til at administrere hvilke brugerroller som skal have lov til at downloade enkelte filer.

dvs. jeg har en mapper der hedder Files, og en der hedder restrictedFiles

men hvis jeg sender blabla.txt afsted som querystring (hvis jeg forstår det korrekt)
så skal jeg i den anden ende sende det som stream eller hvordan..
hvis vi tager ex. 2
Avatar billede arne_v Ekspert
17. marts 2008 - 20:00 #9
Det er lige praecis fordelen ved #2: sikkerheden !

En kode snippet:

void Page_Load(Object sender, EventArgs e)
{
    string fnm = Request["fnm"];
    Stream stm = new FileStream(BASEDIR + fnm, FileMode.Open);
    byte[] b = new byte[(int)stm.Length];
    stm.Read(b, 0, b.Length);
    stm.Close();
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fnm + "\"");
    Response.BinaryWrite(b);
}
Avatar billede mcnovy Nybegynder
17. marts 2008 - 20:05 #10
fnm ville så være tekst taget fra en hiddentext felt eller lignende,
som så skal være den Querystring som jeg modtager fra forgående side..
ik..?

men fungere denne stream med alle slags filer..?
og alle størrelser
Avatar billede arne_v Ekspert
17. marts 2008 - 20:09 #11
Det her er download.aspx og vi tager fnm direkte fra QueryString.

Den er beregnet til binaere filer og kan derfor downloade alle slags filer.
Avatar billede mcnovy Nybegynder
17. marts 2008 - 20:24 #12
ahh.. ok..

så jeg sender ex. databasens ID til download.aspx
som download.aspx?=FileID=40
og det er det..

supergodt.. (og tak for at du lavede koden som C# :) )

jeg har accepteret dit svar, tak for hjælpen..
Avatar billede arne_v Ekspert
17. marts 2008 - 20:44 #13
Ja. Bortset fra at der ikke skal vaere = efter ?.
Avatar billede mcnovy Nybegynder
17. marts 2008 - 20:59 #14
hovsa..
men bare en alm query string..

kan du lige fortælle mig hvordan man fra cs finder querystringen..?

synes ikke lige jeg kan finde det..
Avatar billede mcnovy Nybegynder
17. marts 2008 - 21:03 #15
glem det..

er jo selvfølgelig request..
havde ikke regnet med at det var så let :)
Avatar billede arne_v Ekspert
17. marts 2008 - 21:03 #16
:-)
Avatar billede arne_v Ekspert
17. marts 2008 - 21:04 #17
Det er vist ioevrigt paenere at bruge Request.QueryString["FileID"] fremfor
Request["FileID"].
Avatar billede mcnovy Nybegynder
17. marts 2008 - 21:10 #18
ja.. giver faktisk lidt bedre mening..
og hvis funktionen er den samme, så hellere gøre det lidt pænt..

men, så vil jeg ikke kræve mere for mine point..
jeg takker endnu engang mange gange for din hjælp..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester