Avatar billede kkaen Nybegynder
16. april 2008 - 14:52 Der er 35 kommentarer og
1 løsning

Filvalg sendes til funktion

Jeg har en javascriptfunktion på min side, som har brug for en fil, som brugeren vælger lokalt. Når han har valgt filen, skal han trykke på en knap, hvorefter filen sendes til funktionen som argument, og funktionen udfører så noget med filen.
Jeg har fundet nogle forskellige eksempler på filvalgsbokse, men ikke rigtig noget, hvor jeg kan sende filen videre til en funktion (funktionen virker fint, hvis jeg skriver filnavnet ind på kompileringstidspunkt).
Hvordan laver jeg en funktion, hvor filen vælges og sendes videre til funktionen?
Avatar billede w13 Novice
16. april 2008 - 14:55 #1
Er det bare filnavnet, der skal sendes til funktionen? Det burde du da kunne med filboksen.value
Avatar billede roenving Novice
16. april 2008 - 14:56 #2
<input type="file" onchange="alert(this.value)"> ?-)

-- du skal selvfølgelig sætte dit funktionsnavn ind i stedet for alert'en ...
Avatar billede kkaen Nybegynder
16. april 2008 - 15:00 #3
Nej, det er filindholdet (altså filen som sådan) der skal sendes videre til funktionen. Funktionen står så for at bruge fildataen til videre behandling.
Avatar billede kkaen Nybegynder
16. april 2008 - 15:04 #4
Mht. 16/04-2008 14:56:10:
hvis filen sendes videre til funktionen sådan, hvorledes kan funktionen så modtage filen, og sætte den ind i funktionens kode?
Kan man ("SendMessage" er en anden funktion):
function UploadTest(value){
  SendMessage("Test2", "doIt", "value");
}
("value" er en streng, som representerer stien til filen)
Avatar billede roenving Novice
16. april 2008 - 15:06 #5
Det kan du ikke ...
Avatar billede roenving Novice
16. april 2008 - 15:07 #6
Det eneste du kan bruge, som er gemt lokalt er cookies !)
Avatar billede kkaen Nybegynder
16. april 2008 - 15:10 #7
Ahh ja, der er da vist noget med javascript og sikkerhed.
Men hvad så med alle de eksempler, man kan finde online, som giver mulighed for at vælge en fil på computeren, giver de funktioner blot adgang til filnavnet og ikke til filen som sådan?
Avatar billede w13 Novice
16. april 2008 - 15:13 #8
F.eks. når man uploader en fil, så bliver filstien sendt til en ServerSide-kode (ASP, PHP eller lign.), som uploader med den sti.

Men du kan på ingen måde med JavaScript.
Avatar billede kkaen Nybegynder
16. april 2008 - 15:20 #9
Nu har jeg lige overvejet situationen, og filen skal faktisk ikke uploades til serveren. Der sendes en funtion med på html-siden, som blot skal bruge indholdet af filen. Men det er ikke indholdet som sådan, den skal bruge. I funktionens argumenter skal der blot angives en sti til filen, og så burde funktionen virke. Er dette ikke muligt gennem javascript?
Avatar billede kkaen Nybegynder
16. april 2008 - 15:21 #10
(stien er den absolute sti. Så muligvis er den også med ip...)
Avatar billede w13 Novice
16. april 2008 - 15:25 #11
Hvad indeholder filen?
Avatar billede kkaen Nybegynder
16. april 2008 - 15:27 #12
filen er en obj-fil, som skal renderes på html-siden.
Avatar billede w13 Novice
16. april 2008 - 15:28 #13
En obj-fil? Hvad er det for noget indhold?
Avatar billede kkaen Nybegynder
16. april 2008 - 15:46 #14
Den kan læses i notepad, som ganske almindelige tegn. Så det er ganske almindelige tegn.
Hvis du spørger til, hvad filen representerer rendermæssigt, så er det en 3d-grafikfil.
Avatar billede w13 Novice
16. april 2008 - 15:57 #15
Det er ikke muligt. :( Sorry.
Avatar billede kkaen Nybegynder
16. april 2008 - 16:08 #16
Men hvorfor var det interessant, hvad filen indeholder, og hvad den er? Har man nogle muligheder for filadgang i javascript eller hvordan?
Avatar billede w13 Novice
16. april 2008 - 16:51 #17
Havde det været en ren txt-fil, ku' man ha' hentet indholdet af den med ASP/PHP.
Avatar billede jokkejensen Novice
16. april 2008 - 17:18 #18
filen er en obj-fil, som skal renderes på html-siden.

Hvordan har du tænkt dig at rendere 3d i en browser, er det et flash format ?

/JJ
Avatar billede kkaen Nybegynder
17. april 2008 - 08:41 #19
16/04-2008 16:51:36:

Men når filen godt kan læses af en simpel teksteditor, kan filen så ikke også betragtes som ren tekst?

16/04-2008 17:18:06:

Jeg har en klasse, som står for selve renderingen. Renderingen er ikke et problem, og er derfor ikke interessant i denne sammenhæng. Filen (eller dens indhold) skal blot sendes videre til en klasse.

Hvad med Java Web Start - kan den tilgang ikke klare problemstillingen?
Avatar billede w13 Novice
17. april 2008 - 08:56 #20
kkaen>> Jo, det ville måske nok kunne gøres. (Igen ville det dog skulle gøres med ASP.) Men ville du kunne få noget ud af, at have adgang til de mærkelige tegn, den indeholder?
Avatar billede kkaen Nybegynder
17. april 2008 - 09:17 #21
Mærkelige tegn? Filen indeholder altså stadig ganske almindelig tekst, som alle kan læse og forstå.
Og ja, jeg har absolut brug for at få adgang til filens eller dens indhold. Kun sådan kan jeg få renderet filens grafikindhold på skærmen.
Avatar billede roenving Novice
17. april 2008 - 10:59 #22
Hvorfor sender du den ikke bare med ?-)

-- og hvordan er den kommet til at ligge på brugerens cmputer ?o]
Avatar billede kkaen Nybegynder
17. april 2008 - 11:59 #23
Sende den med? Hvorhen? Det er jo meningen, at brugeren kan vælge en lokal fil, og få den vist i browseren.
Og...ja...brugeren har vel selv lagt filen på sin computer. Det er sådan set ikke interessant for appllikationen, hvor obj-filen oprindelig kommer fra.
Avatar billede w13 Novice
17. april 2008 - 12:01 #24
Nåå den skal bare vises i browseren? Så kan du vel bare linke til stien på den valgte fil med:

file:\\\filsti

Eller evt. vise det i et iframe.
Avatar billede kkaen Nybegynder
17. april 2008 - 13:33 #25
Men filen vises jo via en klasse, som får filen som argument, for derefter at vise outputtet i browseren.

Og brugeren skal jo angive hvilken fil, og hvor den er, for file://filsti kan udfyldes. Og hvordan får brugeren mulighed for dette, så informationen kan sendes videre til klassen?
Avatar billede w13 Novice
17. april 2008 - 17:09 #26
Det gøres med dette HTML-element:

<input type="file">
Avatar billede olebole Juniormester
17. april 2008 - 23:01 #27
<ole>

Hvis HTML-dokumentet ligger på en server, kan du ikke læse indholdet af en lokal fil. Det ville være et gigantisk sikkerhedshul!

Brugeren skal uploade filen, hvorefter serveren kan læse den. Herefter kan indholdet f.eks. udskives til en JS-streng, som din klasse kan bearbejde

/mvh
</bole>
Avatar billede cogitans Nybegynder
02. maj 2008 - 09:20 #28
På sin vis er det da rigtigt, at det kan betragtes som et sikkerhedshul. Men når nu tagget <input type="file"> findes, og brugeren kan advares om sikkerhedsrisikoen, så skulle det da nok kunne løses. Hvilket det også er gjort i andre eksempler.
Når man kan lave nogle filvalgsbokse, så brugeren kan vælge sine egne filer i browserfunktionen, så kan man vel også sende filen videre til en funktion i javascript i browseren?
Avatar billede jokkejensen Novice
02. maj 2008 - 13:51 #29
desværre nej.

Du kan kun få stien, og ellers hente filen. Ellers skal du have adgang vha brugeren smider sitet i trusted sites, og så skal jeg personligt have en go' grund.

vh. Jacob
Avatar billede olebole Juniormester
02. maj 2008 - 17:26 #30
cogitans >> Jeg har på fornemmelsen, du misforstår problematikken. Du kan sagtens lade brugeren vælge en lokal fil med et file-input og loade den valgte fil i en iframe.

Det er til gengæld ikke tilladt at scripte på tværs af domæner. Derfor må JavaScript ikke kunne foretage sig noget med en kode eller fil, som kommer fra et andet domæne end det, JavaScriptet selv kommer fra.

Hvis det var muligt, ville det være et meget alvorligt sikkerhedshul. Så alvorligt, at det ikke skønnes nok at forsyne brugeren med en advarsel.
Tro mig ... tusindvis af mennesker med dyb og bred viden om web-sikkerhed har været flittigt beskæftiget med dette problem. De har ikke evnet at komme med bedre løsninger end at forbyde cross-domain scripting - med mindre sitet er trusted.

Se evt:
    http://en.wikipedia.org/wiki/Same_origin_policy

- hvor der linkes til en del relevante dokumenter om emnet.
Avatar billede kkaen Nybegynder
03. maj 2008 - 10:57 #31
Jeg kan godt se jeres pointer. Men k&#248;rer javascript ikke lokalt? I s&#229; fald vil det vel ikke v&#230;re "cross domain"?
Jeg har downloaded nogle eksempler i Java Web Start, hvor der tilbydes en filbrowser (alts&#229; blot "Files"->"Open"->valg af fil), som vel burde g&#248;re tricket. Der skal dog s&#230;ttes noget specifikt sikkerhedshall&#248;j op, hvilket jeg ogs&#229; har fors&#248;gt, men uden held. Mon ikke s&#229;dan noget Java Web Start kan g&#248;re tricket med at sende en fil videre til et javascript?
Avatar billede olebole Juniormester
03. maj 2008 - 14:22 #32
Jeg kender ikke Java Web Start, men det kunne lyde som Java - et helt andet sprog, som ikke har noget med JavaScript at gøre.

Jo, JavaScript kan sagtens køre lokalt - men jeg har fået forståelsen af, der var tale om en webside.

Du kan - som både jokkejensen og jeg har nævnt - godt få en webside til at tilgå lokale filer, hvis brugeren har sat sitet som trusted. Det kan du dog være helt sikker på, der ikke er nogen alm. brugere, der vil  ;o)
Avatar billede kkaen Nybegynder
07. maj 2008 - 15:30 #33
-Men selvom Java Web Start er et andet sprog, så kan det vel godt kalde javascript-funktioner?

-Jo, der er tale om et website. Men selvom javascriptet hentes på websitet, så kører det vel i browseren, og dermed tildels lokalt? Suma sumarum er, at javascriptet gerne skal sende en lokal fil til en javascript-funktion på html-siden. Og javascriptet sender filen videre til et program, som også kører lokalt. Men om filen sendes gennem browseren til programmet eller ej, er sådan set lige meget. Blot klienten kan sende en lokal fil ind som argument til et program, som klienten har hentet gennem en browser, men som kører lokalt.
Avatar billede olebole Juniormester
08. maj 2008 - 22:20 #34
"-Men selvom Java Web Start er et andet sprog, så kan det vel godt kalde javascript-funktioner?" >> Ja, i Firefox.

"-Jo, der er tale om et website. Men selvom javascriptet hentes på websitet, så kører det vel i browseren, og dermed tildels lokalt?" >> Nej. Et JavaScript, hentet fra et website, kan ikke interagere med lokale filer.

"Suma sumarum er, at javascriptet gerne skal sende en lokal fil til en javascript-funktion på html-siden." >> Og det er, hvad vi længe har forsøgt at forklare dig ikke er muligt.

"Og javascriptet sender filen videre til et program, som også kører lokalt." >> Det er heller ikke muligt med et JavaScript, der hentes på en server.

"Blot klienten kan sende en lokal fil ind som argument til et program, som klienten har hentet gennem en browser, men som kører lokalt." >> Det kan jeg simpelthen ikke få til at give mening. I min web-verden er 'klienten' browseren ... hvad mener du med 'klienten'?  =)
Avatar billede kkaen Nybegynder
17. maj 2008 - 21:05 #35
Det har du skam også ret i. Men jeg prøvede blot at forklare, at 'klienten' (=personen) har brug for at sende en af sine filer ind som argument til et program, som viser det beregnede output i browseren.
Avatar billede kkaen Nybegynder
30. december 2010 - 16:15 #36
lukkes
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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