-
Star
(138)
You must be signed in to star a gist -
Fork
(44)
You must be signed in to fork a gist
-
-
Save ebidel/2410898 to your computer and use it in GitHub Desktop.
| <?php | |
| $fileName = $_FILES['afile']['name']; | |
| $fileType = $_FILES['afile']['type']; | |
| $fileContent = file_get_contents($_FILES['afile']['tmp_name']); | |
| $dataUrl = 'data:' . $fileType . ';base64,' . base64_encode($fileContent); | |
| $json = json_encode(array( | |
| 'name' => $fileName, | |
| 'type' => $fileType, | |
| 'dataUrl' => $dataUrl, | |
| 'username' => $_REQUEST['username'], | |
| 'accountnum' => $_REQUEST['accountnum'] | |
| )); | |
| echo $json; | |
| ?> |
| <!DOCTYPE html> | |
| <!-- | |
| Copyright 2012 Google Inc. | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| Author: Eric Bidelman ([email protected]) | |
| --> | |
| <html> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" /> | |
| <title>xhr.send(FormData) Example</title> | |
| </head> | |
| <body> | |
| <input type="file" name="afile" id="afile" accept="image/*"/> | |
| <script> | |
| document.querySelector('#afile').addEventListener('change', function(e) { | |
| var file = this.files[0]; | |
| var fd = new FormData(); | |
| fd.append("afile", file); | |
| // These extra params aren't necessary but show that you can include other data. | |
| fd.append("username", "Groucho"); | |
| fd.append("accountnum", 123456); | |
| var xhr = new XMLHttpRequest(); | |
| xhr.open('POST', 'handle_file_upload.php', true); | |
| xhr.upload.onprogress = function(e) { | |
| if (e.lengthComputable) { | |
| var percentComplete = (e.loaded / e.total) * 100; | |
| console.log(percentComplete + '% uploaded'); | |
| } | |
| }; | |
| xhr.onload = function() { | |
| if (this.status == 200) { | |
| var resp = JSON.parse(this.response); | |
| console.log('Server got:', resp); | |
| var image = document.createElement('img'); | |
| image.src = resp.dataUrl; | |
| document.body.appendChild(image); | |
| }; | |
| }; | |
| xhr.send(fd); | |
| }, false); | |
| </script> | |
| <!--[if IE]> | |
| <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script> | |
| <script>CFInstall.check({mode: 'overlay'});</script> | |
| <![endif]--> | |
| </body> | |
| </html> |
Does this work in IE? I havin gissues in IE getting things to work properly with the fd FormData.
hy
"var resp = JSON.parse(this.response);"
whats wrong with this above line in IE ?
below is my code but when i post it to the java server i get nulls on parameters can some one help.
<script> Polymer('my-element', { setFiles: function(e, detail, sender) { formData = new FormData(); ``` for (var i = 0, f; f = sender.files[i]; ++i) { formData.append(sender.name, f, f.name); // alert(sender.name); formData.append("name",this.$.name.value ); // alert( f.description); formData.append("descritpion",this.$.description.value ); //alert(this.$.description.value || f.description); formData.append("title",this.$.title.value); // alert(this.$.title.value || f.title); } this.$.ajax.body = formData; // Override default type set by core-ajax. // Allow browser to set the mime multipart content type itself. this.$.ajax.contentType = null; }, upload: function(e, detail, sender) { // alert(this.$.title.value || f.title); if (!this.$.file.files.length) { alert('Please include a file'); return; } this.$.ajax.go(); }, responseChanged: function() { console.log('Response from server', this.response); }, }); ``` </script>Nicee job using FormData in JavaScript to populate $_FILES variable in php, i was wandering some days ago, why not try to populate $_FILES variable, you did it anyway !
Nice job, thank you very much (y)
Please for days now i have been looking for how to modifiy that code and get it to do a multiple upload. Please can you show how to do a multiple upload with this ?
@kressly Just include multiple files in the FormData.
and if i want to save the image in a carpet or path
{"name":null,"type":null,"dataUrl":"data:;base64,","username":null,"accountnum":null} as output
i am receiving this . can some one help to resolve my issue @chrisp22 could you find solution
You can find a working implementation of uploading file using XMLHttpRequest here.
Hi All,
Is there a way I can append the image path without using the file input
I have tried formData.append('avatar', avatar.files[0], 'cc.jpg'); any help please
Awesome, have been looking for this all day!
Thanks!
Thank you very much. Your example help me so much. I looking long time how to upload files to server via xhr. And again, thank you so much.
Thanks a lot, after looking all day long I finally found the right script!!!
Note to anyone finding this via Google and working with MVC: To use FormData, you'd have to post using xhr.setRequestHeader("Content-Type","multipart/form-data"); - not included above - but then your server-side will throw an exception if you use
if (!Request.Content.IsMimeMultipartContent() { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); }
which is something it should never do, so I'm convinced FormData can only be used with PHP. Better to get the file into a base64 string (I have an example here: https://stackoverflow.com/questions/37134433/convert-input-file-to-byte-array/49676679#49676679 ), create a JSON object:
var dataObj = { afile: myBase64file, username: "Groucho", accountnum: 123456, };,
add in this after the xhr.open():
xhr.setRequestHeader("Content-Type","application/json;charset=UTF-8");
then do xhr.send(JSON.stringify(dataObj)); at the end.
On the MVC side, you need:
[System.Web.Http.HttpPost]
public virtual ActionResult Post([FromBody]MyModel myModelObject) { ... }
You'll need to have a model:
public class MyModel {
public string afile { get; set; }
public string username { get; set; }
public int accountnum { get; set; }
}
Inside the Post, the parameters should be accessible: string file = myModelObject.afile;
Hey! you are great!! thnks !!!
Note to anyone finding this via Google Search about Cordova File Upload:
You can use this code on input:file with position:absolute; opacity:0; trick too. Works like a charm.
can send(fd) plus other such as image size?
Yes. You can still populate the data: {} property as you wish.
What I said just triggers the usual use case for the plugin.
And it still works to this day!
I can access rsp.dataUrl my object all the time refuses to read into it, i have it undefined, pls help.
Thanks so much :)
I was looking for how to use $_FILES with an AJAX post and everywhere they only showed the JavaScript but not how to handle the data in PHP.