Hi,
WebSharper does not currently provide a simple file uploading control; though there will probably be such a functionality in an upcoming release.
In the source of FPish we use a custom built formlet like this:
I hope this is helpful.
WebSharper does not currently provide a simple file uploading control; though there will probably be such a functionality in an upcoming release.
In the source of FPish we use a custom built formlet like this:
[<JavaScript>]
let FileControl name =
Formlet.BuildFormlet <| fun () ->
let stateChanged = new Event<Result<string>>()
let input =
Input [Attr.Type "file"; Attr.Name name]
|>! OnChange (fun e -> stateChanged.Trigger(Result.Success e.Value))
let reset() =
input.Value <- ""
stateChanged.Trigger(Result.Success "")
input, reset, stateChanged.Publish
|> Formlet.InitWith ""
// Example usage of this control
[<JavaScript>]
let fileForm =
let form = Form [Attr.Action submitUrl
EncType "multipart/form-data"
Method "POST"]
let formlet =
FileControl "myFileInput"
|> Validator.IsNotEmpty "Please select a file"
|> Enhance.WithSubmitButton
|> Formlet.Run (fun _ -> form.Dom?submit())
form -< [formlet]
The server-side code for the page that receives the data looks like this:let context = HttpContext.Current let files = context.Request.Files if Seq.exists ((=) "myFileInput") files.AllKeys then files.["myFileInput"].SaveAs "filenameOnServer"
I hope this is helpful.
You are very fast, thank you so much.
The fileForm shows the file-text-field, a browse button and a submit button, perfect.
Choosing a file, pressing submit and nothing happens, no POST is sent (checked with Fiddler).
I suppose to bind a message handler to the submit button to call the [<Rpc>] ReceiveFile with:
That way on submit a POST is sent but it's empty, Fiddler shows:
What do I miss?
P.S. I'm new to ASP.Net and will do that with WebSharper and F# only ;-)
The fileForm shows the file-text-field, a browse button and a submit button, perfect.
Choosing a file, pressing submit and nothing happens, no POST is sent (checked with Fiddler).
I suppose to bind a message handler to the submit button to call the [<Rpc>] ReceiveFile with:
|> Formlet.Run (fun _ -> form.Dom?submit( ReceiveFile() ) )Because of duck-typing style there is no static parameter check in submit. Maybe you have shortened your example code here.
That way on submit a POST is sent but it's empty, Fiddler shows:
{"$TYPES":[],"$DATA":null}
What do I miss?
P.S. I'm new to ASP.Net and will do that with WebSharper and F# only ;-)
Hi,
This doesn't seem to work in chrome with 2.4. I get a javascript error in the console at
var clo2;
clo2=form.Body.submit;
return clo2(null); //Uncaught TypeError: Illegal invocation
which is generated for "form.Dom?submit()"
Any ideas?
This doesn't seem to work in chrome with 2.4. I get a javascript error in the console at
var clo2;
clo2=form.Body.submit;
return clo2(null); //Uncaught TypeError: Illegal invocation
which is generated for "form.Dom?submit()"
Any ideas?
I'm getting the same issue -
var clo2;
clo2=form.Body.submit;
return clo2(null); //Uncaught TypeError: Illegal invocation
I'm running the example as-is with Chrome 18
var clo2;
clo2=form.Body.submit;
return clo2(null); //Uncaught TypeError: Illegal invocation
I'm running the example as-is with Chrome 18
Hi,
It turns out we just had the exact same problem with the photo upload on FPish. Here is how to fix it:
As a general advice, the
It turns out we just had the exact same problem with the photo upload on FPish. Here is how to fix it:
// Define the following top-level function:
[<Inline "$form.submit()">]
let submit (form: Dom.Element) = ()
// Then replace `form.Dom?submit()` with:
submit form.Dom
As a general advice, the
? operator should be used to access JavaScript object fields, but not methods. As you have noticed, the WebSharper translator can slightly alter such method calls.Sorry, my message wasn't really clear about the server-side part.
Actually, what I did there is build a regular HTML
So, the server-side code shouldn't be in an
Hopefully, thanks to the HTML5 File API, we should be able to provide a more convenient and consistent FileUpload formlet control in an upcoming release of WebSharper.
Actually, what I did there is build a regular HTML
<form> element, and submit the "standard" way, ie. by calling the page at submitUrl and passing the form data as POST parameters.So, the server-side code shouldn't be in an
[<Rpc>], but rather in the sitelet that handles the submitUrl.Hopefully, thanks to the HTML5 File API, we should be able to provide a more convenient and consistent FileUpload formlet control in an upcoming release of WebSharper.
Thank you for the clarification.
It works pretty well with Internet Explorer (8.0) but doesn't work with Firefox 10.0.1 (or 4.0).
With Firefox the submit click jumps not to the
Any idea (cross-browsers problem)?
It works pretty well with Internet Explorer (8.0) but doesn't work with Firefox 10.0.1 (or 4.0).
With Firefox the submit click jumps not to the
submitUrl.Any idea (cross-browsers problem)?
Topic tags
- f# × 3663
- compiler × 263
- functional × 199
- websharper × 120
- c# × 119
- classes × 96
- web × 94
- book × 84
- .net × 82
- async × 72
- parallel × 43
- server × 43
- parsing × 41
- testing × 41
- asynchronous × 30
- monad × 28
- ocaml × 26
- tutorial × 26
- haskell × 25
- workflows × 22
- html × 21
- linq × 21
- introduction × 19
- silverlight × 19
- wpf × 19
- fpish × 18
- collections × 14
- pipeline × 14
- templates × 12
- monads × 11
- opinion × 10
- reactive × 10
- plugin × 9
- scheme × 9
- sitelets × 9
- solid × 9
- basics × 8
- concurrent × 8
- deployment × 8
- how-to × 8
- python × 8
- complexity × 7
- javascript × 6
- jquery × 6
- lisp × 6
- real-world × 6
- workshop × 6
- xaml × 6
- conference × 5
- dsl × 5
- java × 5
- metaprogramming × 5
- ml × 5
- scala × 5
- visual studio × 5
- formlets × 4
- fsi × 4
- lift × 4
- sql × 4
- teaching × 4
- alt.net × 3
- aml × 3
- enhancement × 3
- list × 3
- reflection × 3
- type provider × 3
- blog × 2
- compilation × 2
- computation expressions × 2
- corporate × 2
- courses × 2
- cufp × 2
- enterprise × 2
- entity framework × 2
- erlang × 2
- events × 2
- f# interactive × 2
- fsc × 2
- google maps × 2
- html5 × 2
- http × 2
- interactive × 2
- interface × 2
- iphone × 2
- iteratee × 2
- jobs × 2
- kendo × 2
- keynote × 2
- mvc × 2
- numeric × 2
- obfuscation × 2
- oop × 2
- packaging × 2
- pattern matching × 2
- pipelines × 2
- rx × 2
- script × 2
- seq × 2
- sockets × 2
- stm × 2
- tcp × 2
- trie × 2
- type × 2
- xna × 2
- zh × 2
- .net interop × 1
- 2012 × 1
- abstract class × 1
- accumulator × 1
- active pattern × 1
- addin × 1
- agents × 1
- agile × 1
- alter session × 1
- android × 1
- anonymous object × 1
- appcelerator × 1
- architecture × 1
- array × 1
- arrays × 1
- asp.net 4.5 × 1
- asp.net mvc × 1
- asp.net mvc 4 × 1
- asp.net web api × 1
- aspnet × 1
- ast × 1
- b-tree × 1
- bistro × 1
- bug × 1
- camtasia studio × 1
- canvas × 1
- class × 1
- client × 1
- clojure × 1
- closures × 1
- cloud × 1
- cms × 1
- coding diacritics × 1
- color highlighting × 1
- combinator × 1
- confirm × 1
- constructor × 1
- continuation-passing style × 1
- coords × 1
- coursera × 1
- csla × 1
- css × 1
- current_schema × 1
- data × 1
- database × 1
- declarative × 1
- delete × 1
- dhtmlx × 1
- discriminated union × 1
- distance × 1
- docs × 1
- documentation × 1
- dol × 1
- domain × 1
- du × 1
- duf-101 × 1
- eclipse × 1
- edsl × 1
- em algorithm × 1
- emacs × 1
- emotion × 1
- error × 1
- etw × 1
- euclidean × 1
- event × 1
- example × 1
- examples × 1
- ext js × 1
- extension methods × 1
- extra × 1
- facet pattern × 1
- fantomas × 1
- fear × 1
- float × 1
- fp × 1
- frank × 1
- fsdoc × 1
- fsharp.core × 1
- fsharp.powerpack × 1
- fsharpx × 1
- function × 1
- functional style × 1
- gc × 1
- generic × 1
- geometry × 1
- getlastwin32error × 1
- google × 1
- group × 1
- hash × 1
- history × 1
- hosting × 1
- httpcontext × 1
- https × 1
- hubfs × 1
- ie 8 × 1
- if-doc × 1
- inheritance × 1
- installer × 1
- interpreter × 1
- io × 1
- ios × 1
- ipad × 1
- kendochart × 1
- kendoui × 1
- learning × 1
- licensing × 1
- macro × 1
- macros × 1
- maps × 1
- markup × 1
- marshal × 1
- math × 1
- metro style × 1
- micro orm × 1
- minimum-requirements × 1
- multidimensional × 1
- multithreading × 1
- mysql × 1
- mysqlclient × 1
- nancy × 1
- nested × 1
- nested loops × 1
- node × 1
- object relation mapper × 1
- object-oriented × 1
- offline × 1
- option × 1
- orm × 1
- osx × 1
- owin × 1
- paper × 1
- parameter × 1
- performance × 1
- persistent data structure × 1
- phonegap × 1
- pola × 1
- powerpack × 1
- prefix tree × 1
- principle of least authority × 1
- programming × 1
- projekt_feladat × 1
- protected × 1
- provider × 1
- ptvs × 1
- quant × 1
- quotations × 1
- range × 1
- raphael × 1
- razor × 1
- rc × 1
- real-time × 1
- reference × 1
- restful × 1
- round table × 1
- runtime × 1
- scriptcs × 1
- scripting × 1
- service × 1
- session-state × 1
- sitelet × 1
- sqlentityconnection × 1
- stickynotes × 1
- stress × 1
- strong name × 1
- structures × 1
- tdd × 1
- template × 1
- tracing × 1
- tsunamiide × 1
- type inference × 1
- type providers × 1
- typescript × 1
- upload × 1
- vb × 1
- vb.net × 1
- vector × 1
- visual f# × 1
- visual studio 11 × 1
- visual studio 2012 × 1
- visual studio shell × 1
- visualstudio × 1
- web api × 1
- webapi × 1
- windows 7 × 1
- windows 8 × 1
- windows-phone × 1
- winrt × 1
- xml × 1
- zarovizsga × 1
|
Copyright (c) 2011-2012 IntelliFactory. All rights reserved. Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us |
Built with WebSharper |
A click on a button allows to select the file that will be uploaded to the server.
To start, I don't need some multi-file upload with progress visualization (would also be very nice with F# Async and WebSharper).
Is the FileUpload control the way to go, and how to do it with WebSharper?
I think it would be a good sample for the WebSharper demo sample page.
Thanks in advance