{"id":24867,"date":"2021-05-26T09:44:00","date_gmt":"2021-05-26T06:44:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24867"},"modified":"2021-10-17T20:39:36","modified_gmt":"2021-10-17T17:39:36","slug":"veda-ja-pudota-useita-tiedostolatauksia-kayttamalla-javascriptia-ja-php-ta","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fi\/veda-ja-pudota-useita-tiedostolatauksia-kayttamalla-javascriptia-ja-php-ta\/","title":{"rendered":"Ved\u00e4 ja pudota useita tiedostolatauksia k\u00e4ytt\u00e4m\u00e4ll\u00e4 JavaScripti\u00e4 ja PHP: t\u00e4"},"content":{"rendered":"<p>Aiemmin olen kirjoittanut artikkelin <a href=\"https:\/\/themewp.inform.click\/fi\/veda-ja-pudota-tiedostolataus-kayttamalla-javascriptia-ja-php-ta\/\" title=\"Ved\u00e4 ja pudota tiedostojen lataaminen JavaScriptin ja PHP: n avulla\" >Ved\u00e4 ja pudota tiedostojen lataaminen JavaScriptin ja PHP: n avulla<\/a>. Jotkut lukijat pyysiv\u00e4t kirjoittamaan artikkelin tiedostojen latausohjelman lis\u00e4\u00e4misest\u00e4, jonka avulla k\u00e4ytt\u00e4j\u00e4t voivat ladata useita tiedostoja ved\u00e4 ja pudota -ominaisuuksien avulla.<\/p>\n<p>Ty\u00f6skennelless\u00e4si verkkosovelluksessa sinun on ehk\u00e4 ladattava useita tiedostoja yhdell\u00e4 latauslaitteella lomakkeellesi. Se voi auttaa k\u00e4ytt\u00e4j\u00e4\u00e4 lataamaan yhden tai useita tiedostoja kerralla. He eiv\u00e4t halua ladata useita tiedostoja yksi kerrallaan. T\u00e4llaisen tiedostonlatausominaisuuden antaminen lis\u00e4\u00e4 parempaa k\u00e4ytt\u00f6kokemusta ja my\u00f6s nopeuttaa sovellustasi.<\/p>\n<p>T\u00e4ss\u00e4 artikkelissa n\u00e4yt\u00e4n, kuinka voit lis\u00e4t\u00e4 t\u00e4m\u00e4n tiedostolatausohjelman k\u00e4ytt\u00e4m\u00e4tt\u00e4 ulkoista ved\u00e4 ja pudota -laajennusta. L\u00e4het\u00e4n tiedostot Ajaxilla. Se tarkoittaa, ett\u00e4 tiedostot ladataan palvelimelle lataamatta koko sivua uudelleen.<\/p>\n<h3>P\u00e4\u00e4st\u00e4 alkuun<\/h3>\n<p>Kuten sanoin, emme k\u00e4yt\u00e4 mit\u00e4\u00e4n ulkoista laajennusta ved\u00e4 ja pudota -ominaisuuteen. Aion kirjoittaa kaiken koodin tyhj\u00e4st\u00e4. Se on paljon helpompaa. Siin\u00e4 ei ole monimutkaisia \u200b\u200bjuttuja. Seuraa vain alla olevia ohjeita ja olet valmis.<\/p>\n<p>Luodaan tiedosto <code>index.html<\/code>ja lis\u00e4t\u00e4\u00e4n koodi sen alle.<\/p>\n<p><strong>index.html<\/strong><\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta charset=\"UTF-8\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;title&gt;Drag Drop Multiple File Upload&lt;\/title&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;link rel=\"stylesheet\" href=\"style.css\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div id=\"drop_file_zone\" ondrop=\"upload_file(event)\" ondragover=\"return false\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div id=\"drag_upload_file\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p&gt;Drop file(s) here&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p&gt;or&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"button\" value=\"Select File(s)\" onclick=\"file_explorer();\"&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" id=\"selectfile\" multiple&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.5.1\/jquery.min.js\"&gt;&lt;\/script&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;script src=\"custom.js\"&gt;&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>T\u00e4ss\u00e4 olen mukana <code>style.css<\/code>ja <code>custom.js<\/code>johon lis\u00e4t\u00e4\u00e4n siihen liittyv\u00e4 koodi. Koska aiomme k\u00e4ytt\u00e4\u00e4 Ajaxia, otin mukaan jQuery-kirjaston.<\/p>\n<p>Annetaan perusk\u00e4ytt\u00f6liittym\u00e4 tiedostolatauksellemme lis\u00e4\u00e4m\u00e4ll\u00e4 joitain CSS-ominaisuuksia. Voit tietysti lis\u00e4t\u00e4 oman CSS: n, jotta tiedostojen latauslaite olisi erilainen.<\/p>\n<p><strong>style.css<\/strong><\/p>\n<pre><code>#drop_file_zone {\n\u00a0\u00a0\u00a0\u00a0background-color: #EEE;\n\u00a0\u00a0\u00a0\u00a0border: #999 5px dashed;\n\u00a0\u00a0\u00a0\u00a0width: 290px;\n\u00a0\u00a0\u00a0\u00a0height: 200px;\n\u00a0\u00a0\u00a0\u00a0padding: 8px;\n\u00a0\u00a0\u00a0\u00a0font-size: 18px;\n}\n#drag_upload_file {\n\u00a0\u00a0\u00a0\u00a0width:50%;\n\u00a0\u00a0\u00a0\u00a0margin:0 auto;\n}\n#drag_upload_file p {\n\u00a0\u00a0\u00a0\u00a0text-align: center;\n}\n#drag_upload_file #selectfile {\n\u00a0\u00a0\u00a0\u00a0display: none;\n}<\/code><\/pre>\n<p>T\u00e4m\u00e4n j\u00e4lkeen sinun pit\u00e4isi n\u00e4hd\u00e4 tiedostojen latausohjelma kuten alla olevassa kuvakaappauksessa:<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20458-6081f4f9475a9.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20458-6081f4f9475a9.png\" alt=\"Ved\u00e4 ja pudota useita tiedostolatauksia k\u00e4ytt\u00e4m\u00e4ll\u00e4 JavaScripti\u00e4 ja PHP: t\u00e4\" ><\/a><\/p>\n<h3>Ved\u00e4 ja pudota useita tiedostoja JavaScriptin ja PHP: n avulla<\/h3>\n<p>Olet m\u00e4\u00e4ritt\u00e4nyt perusk\u00e4ytt\u00f6liittym\u00e4n. Nyt voimme menn\u00e4 eteenp\u00e4in ja kirjoittaa todellisen koodin JavaScriptille ja PHP: lle, jotka lataavat tiedostoja palvelimelle. HTML-koodiin lis\u00e4sin 2 menetelm\u00e4\u00e4 upload_file() ja file_explorer (), jotka kutsuvat pudotustiedostoja ja valitsevat tiedostot vastaavasti.<\/p>\n<p>M\u00e4\u00e4ritet\u00e4\u00e4n n\u00e4m\u00e4 menetelm\u00e4t ja v\u00e4litet\u00e4\u00e4n tiedostot palvelinpuolen komentosarjalle, joka lataa tiedostot palvelimelle.<\/p>\n<p><strong>custom.js<\/strong><\/p>\n<pre><code>var fileobj;\nfunction upload_file(e) {\n\u00a0\u00a0\u00a0\u00a0e.preventDefault();\n\u00a0\u00a0\u00a0\u00a0ajax_file_upload(e.dataTransfer.files);\n}\n\u00a0\nfunction file_explorer() {\n\u00a0\u00a0\u00a0\u00a0document.getElementById('selectfile').click();\n\u00a0\u00a0\u00a0\u00a0document.getElementById('selectfile').onchange = function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0files = document.getElementById('selectfile').files;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ajax_file_upload(files);\n\u00a0\u00a0\u00a0\u00a0};\n}\n\u00a0\nfunction ajax_file_upload(file_obj) {\n\u00a0\u00a0\u00a0\u00a0if(file_obj != undefined) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var form_data = new FormData();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for(i=0; i&lt;file_obj.length; i++) {\u00a0 \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0form_data.append('file[]', file_obj[i]);\u00a0 \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.ajax({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type: 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0url: 'ajax.php',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0contentType: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0processData: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data: form_data,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0success:function(response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0alert(response);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('#selectfile').val('');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Kirjoita lopuksi palvelinpuolen koodi tiedoston lataamista varten <code>ajax.php<\/code>tiedostoon.<\/p>\n<p><strong>ajax.php<\/strong><\/p>\n<pre><code>&lt;?php\nforeach($_FILES['file']['name'] as $key=&gt;$val){\n\u00a0\u00a0\u00a0\u00a0$file_name = $_FILES['file']['name'][$key];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ get file extension\n\u00a0\u00a0\u00a0\u00a0$ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ get filename without extension\n\u00a0\u00a0\u00a0\u00a0$filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (!file_exists(getcwd(). '\/uploads')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mkdir(getcwd(). '\/uploads', 0777);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$filename_to_store = $filenamewithoutextension. '_' .uniqid(). '.' .$ext;\n\u00a0\u00a0\u00a0\u00a0move_uploaded_file($_FILES['file']['tmp_name'][$key], getcwd(). '\/uploads\/'.$filename_to_store);\n}\necho \"File(s) uploaded successfully\";\ndie;<\/code><\/pre>\n<p>T\u00e4m\u00e4 koodi luo palvelimellesi &#8217;uploads&#8217; -hakemiston ja tallentaa kaikki tiedostot t\u00e4h\u00e4n hakemistoon. Tallennettaessa tiedostoja palvelimelle huolehdimme jokaisen ladatun tiedoston yksil\u00f6llisest\u00e4 nimest\u00e4 PHP-toiminnolla <code>uniqid()<\/code>.<\/p>\n<p>Kyse on useiden tiedostojen lataamisesta vet\u00e4m\u00e4ll\u00e4 pudota-ominaisuutta. Toivon, ett\u00e4 sait tiet\u00e4\u00e4 siit\u00e4. Haluaisin kuulla ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.<\/p>\n<h4>Aiheeseen liittyv\u00e4t artikkelit<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuvan-optimointi-artisansweb-image-optimizer-paketilla\/\" title=\"Kuvan optimointi artisansweb \/ image-optimizer -paketilla\" >Kuvan optimointi artisansweb \/ image-optimizer -paketilla<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-toteuttaa-palanlataus-php-ssa\/\" title=\"Kuinka toteuttaa palanlataus PHP: ss\u00e4\" >Kuinka toteuttaa palanlataus PHP: ss\u00e4<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-lukea-tekstia-kuvasta-php-ssa\/\" title=\"Kuinka lukea teksti\u00e4 kuvasta PHP: ss\u00e4\" >Kuinka lukea teksti\u00e4 kuvasta PHP: ss\u00e4<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Haluatko toteuttaa vet\u00e4m\u00e4ll\u00e4 ja pudottamalla useita tiedostoja lataamisen ominaisuuden verkkosivustollesi? T\u00e4ss\u00e4 artikkelissa tutkitaan kuinka lis\u00e4t\u00e4 tiedostojen latausohjelma, joka sallii<\/p>\n","protected":false},"author":1,"featured_media":21646,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[247],"tags":[843],"class_list":["post-24867","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript-6","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/comments?post=24867"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24867\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media\/21646"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media?parent=24867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/categories?post=24867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/tags?post=24867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}