I've now found a much simpler way to do this with 0.18 http://simonh1000.github.io/2016/12/elm-s3-uploads/
On Tuesday, 9 August 2016 08:30:47 UTC+2, Simon wrote: > > Hi, I see you do not implement readAsArrayBuffer. Isn't that the most > flexible for binary data? > Simon > > On Wednesday, 6 July 2016 05:27:50 UTC+2, Gusztáv Szikszai wrote: >> >> It takes two ( >> https://github.com/gdotdesign/elm-ui/blob/master/source/Ui/Native/FileManager.elm#L74): >> >> first is the key (String) which is "file" and the second is the file object >> which goes through here >> https://github.com/gdotdesign/elm-ui/blob/master/source/Native/FileManager.js#L48 >> >> which actually returns a File >> <https://developer.mozilla.org/en/docs/Web/API/File> but with a type of >> String so Http.stringData >> <http://package.elm-lang.org/packages/evancz/elm-http/3.0.1/Http#stringData> >> can >> accept it. >> >> Sadly ports have very strict border protection as described here >> http://guide.elm-lang.org/interop/javascript.html so there is no way >> that a File can be passed through them, that is the main reason a native >> module is needed. >> >> On Tuesday, July 5, 2016 at 8:23:38 PM UTC+2, Simon wrote: >>> >>> Hi >>> I’m not sure I want to adopt native code as such, but I already need to >>> use ports, so I’d like to learn from what you have. I’m struggling to follow >>> >>> https://github.com/gdotdesign/elm-ui-guide/blob/master/examples/file-upload.elm#L55 >>> FileManager.toFormData "file" file >>> as toFormData appears to take only argument? >>> >>> What am I missing? >>> >>> Simon >>> >>> On Tuesday, 5 July 2016 06:10:18 UTC+2, Gusztáv Szikszai wrote: >>> >>> Funnily enough the Http package doesn't need to change in order to allow >>>> file uploads. >>>> >>>> I already made this work for Elm-UI, as I described here >>>> https://gdotdesign.gitbooks.io/elm-ui-guide/content/guides/handling_files.html >>>> >>>> the Http package uses FormData >>>> <https://developer.mozilla.org/en/docs/Web/API/FormData> to send >>>> multipart forms and FormData allows appending files, so the only thing >>>> needed is to tricking it to accept the File object as a String because >>>> that's the only supported Http.Data >>>> <http://package.elm-lang.org/packages/evancz/elm-http/3.0.1/Http#Data> >>>> type. >>>> >>>> The main problem is how to get the File >>>> <https://developer.mozilla.org/en/docs/Web/API/File> and for that I >>>> created the FileManager >>>> <https://github.com/gdotdesign/elm-ui/blob/master/source/Ui/Native/FileManager.elm> >>>> (with >>>> a native module >>>> <https://github.com/gdotdesign/elm-ui/blob/master/source/Native/FileManager.js>) >>>> module, >>>> basically it allows selecting single / multiple files and returns a record >>>> that contains information about the file and the raw File object itself >>>> and >>>> then there is the toFormData method which converts it to Http.Data, >>>> masquerading the File as a String. >>>> >>>> And that is all, you can see a working example here: >>>> https://github.com/gdotdesign/elm-ui-guide/blob/master/examples/file-upload.elm >>>> >>>> (it needs Elm-UI) >>>> >>>> If that wasn't clear I'm happy to explain it in more detail. >>>> >>>> Unfortunately this still using native modules and although it can be >>>> separated into a standalone module I see no way that it will be white >>>> listed soon, let's just hope installing packages directly from Github will >>>> come soon. >>>> >>>> On Monday, July 4, 2016 at 11:45:29 PM UTC+2, Daniel Bachler wrote: >>>>> >>>>> Hi Simon, >>>>> >>>>> here you go: >>>>> https://github.com/danyx23/elm-http/commits/encode-as-json >>>>> As I said, it's hacky and I haven't gotten around to updating to 0.17, >>>>> but for 0.16 for my purposes it worked :) >>>>> >>>>> Daniel >>>>> >>>>> -- >>>>> Daniel Bachler >>>>> http://www.danielbachler.de >>>>> <http://www.danielbachler.de/contact> >>>>> >>>>> On 4 July 2016 at 13:07, Simon <[email protected]> wrote: >>>>> >>>>>> I'd love to look at what you did. I have run into this issue, or at >>>>>> least think I have in that i need to create a multipart element and >>>>>> https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/Sending_forms_through_JavaScript >>>>>> >>>>>> suggests I need a different sort of content boundary than `Http` >>>>>> foresees >>>>>> (`blob` rather than `------WebKitFormBoundaryjRcsGGwEvozx7JSA`). >>>>>> >>>>>> >>>>>> On Thursday, 30 June 2016 15:44:23 UTC+2, Daniel Bachler wrote: >>>>>>> >>>>>>> Yes, I have a private fork of the http module with some minor >>>>>>> modifications to allow uploading a Json.Value (that has to be a blob). >>>>>>> It's >>>>>>> not pretty but it gets the job done. I haven't gotten around to >>>>>>> upgrading >>>>>>> to 0.17 yet, but I plan to do that in July. Are you interested in my >>>>>>> modifications to elm-http for 0.16? >>>>>>> >>>>>>> -- >>>>>>> Daniel Bachler >>>>>>> http://www.danielbachler.de >>>>>>> <http://www.danielbachler.de/contact> >>>>>>> >>>>>>> On 27 June 2016 at 21:13, Simon <[email protected]> wrote: >>>>>>> >>>>>>>> Daniel >>>>>>>> did you ever make progress on this? >>>>>>>> Simon >>>>>>>> >>>>>>>> >>>>>>>> On Monday, 7 December 2015 20:47:32 UTC+1, Daniel Bachler wrote: >>>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> Simon and I extended his Filereader library ( >>>>>>>>> https://github.com/simonh1000/file-reader ) over the last few >>>>>>>>> days to read binary files as well as text files. There are now 3 >>>>>>>>> methods: >>>>>>>>> readAsText, readAsArrayBuffer and readAsDataURL. One of the examples >>>>>>>>> makes >>>>>>>>> use of a Dropzone where you can drop images, then readAsDataURL is >>>>>>>>> used to >>>>>>>>> read an image as a dataURL (=base64 encoded) and assign that to an >>>>>>>>> img src >>>>>>>>> tag. The roundtripping of values from the event is done with a >>>>>>>>> decoder that >>>>>>>>> decodes the files as a Json.Values and uses that to pass it into one >>>>>>>>> of the >>>>>>>>> readAs* functions. >>>>>>>>> >>>>>>>>> But as Simon wrote in this ticket >>>>>>>>> https://github.com/simonh1000/file-reader/issues/12 , the most >>>>>>>>> interesting use case for readAsArrayBuffer would be to upload >>>>>>>>> straight >>>>>>>>> binary file - and this doesn't work right now because Elm.http lacks >>>>>>>>> support for Blob/File ( >>>>>>>>> https://github.com/evancz/elm-http/blob/3.0.0/src/Blob.elm is >>>>>>>>> just a stub). >>>>>>>>> >>>>>>>>> I don't know that much about Elm yet, so I want to ask more >>>>>>>>> knowledgeable people here: what would it take to implement a >>>>>>>>> Blob/File Api >>>>>>>>> for Elm.http? Is it mostly about providing type definitions and >>>>>>>>> handling >>>>>>>>> the corresponding cases in Json.Decode/Json.Encode? If that is all I >>>>>>>>> would >>>>>>>>> see if I can come up with a solution and send a PR, but I'd like to >>>>>>>>> know >>>>>>>>> how deep the water might be before I get started with something like >>>>>>>>> this :) >>>>>>>>> >>>>>>>>> Also, Elm.http does not have a Contributing file, is there a >>>>>>>>> general one for big important Elm libraries? >>>>>>>>> >>>>>>>>> Daniel >>>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to a topic in >>>>>>>> the Google Groups "Elm Discuss" group. >>>>>>>> To unsubscribe from this topic, visit >>>>>>>> https://groups.google.com/d/topic/elm-discuss/g65pRzgqkvo/unsubscribe >>>>>>>> . >>>>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>>>> [email protected]. >>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>> >>>>>>> -- >>>>>> You received this message because you are subscribed to a topic in >>>>>> the Google Groups "Elm Discuss" group. >>>>>> To unsubscribe from this topic, visit >>>>>> https://groups.google.com/d/topic/elm-discuss/g65pRzgqkvo/unsubscribe >>>>>> . >>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>> [email protected]. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> >>> >> -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
