2017-10-30 105 views
11

Çok sayıda dosya yükleme formunun (reference) çok temel bir örneğini oluşturdum, masaüstü bilgisayarlarda mükemmel çalışıyor ancak mobil cihazlarda değil, en azından test ettiğim siteler.Basit çoklu dosya yükleme mobil cihazda çalışmıyor

Mobile üzerinde

(Xiaomi MI4 [Android sürümü: 6.1] - Google Chrome/Mozilla Firefox): Google Fotoğraflar seçerseniz
enter image description hereenter image description here

ve birden belirleyin: Ben bu ekranı göreceksiniz dosyaları seç tıkladığınızda dosyaları, sadece ilk dosya forma eklenir. Ben Galeri (yerli) uygulama seçin ve birden fazla dosya seçerseniz ben formdaki doğru numarayı almak ama yükleme tıkladığımda ben "Hata" ekran olsun:

enter image description here

herhangi bir fikir bu yüzden olay?

Google Fotoğraflar ve yerel uygulama yanında 5 farklı uygulama denedim, sonuncusu, Piktures aslında çalıştı!

Lütfen bunun bir uygulama olayı olmadığını söyleyin ... dosyaları doğru şekilde bulmanın bir yolu var mı? ekli

Kodu:

<form method="post" enctype="multipart/form-data"> 
     <input type="file" name="my_file[]" multiple> 
     <input type="submit" value="Upload"> 
    </form> 
    <?php 
     if (isset($_FILES['my_file'])) { 
      $myFile = $_FILES['my_file']; 
      $fileCount = count($myFile["name"]); 

      for ($i = 0; $i < $fileCount; $i++) { 
       ?> 
        <p>File #<?= $i+1 ?>:</p> 
        <p> 
         Name: <?= $myFile["name"][$i] ?><br> 
         Temporary file: <?= $myFile["tmp_name"][$i] ?><br> 
         Type: <?= $myFile["type"][$i] ?><br> 
         Size: <?= $myFile["size"][$i] ?><br> 
         Error: <?= $myFile["error"][$i] ?><br> 
        </p> 
       <?php 
      } 
     } 
    ?> 

Eğer test isterseniz: http://odedta.com/projects/jqueryfileupload/

teşekkürler!

+0

. Yüklemeye çalıştığınız dosyalar çok büyük, 2. javascript api kullanarak dosyaları mı kullanıyorsunuz? –

+0

@TouqeerShafi Hey, 1. Dosyalar her biri yaklaşık 80KB'dir ve bir seferde 2-3 deniyorum. 2. Ben DropzoneJS kullanarak yapıyorum app, ben yanlış olanı anlayamadım çünkü dış sınıf sorunları veya bir JS sorunu ortadan kaldırmak için bu basit bir örnek oluşturdu, bu saf PHP/HTML ve bu hata hala oluyor ... Ben bu hata için kompanse bir JS çözümü var olduğunu umuyorum ... orijinal 'input [type =" date "]' ' – odedta

+0

işlevselliğini arttıran datepickers JS sınıflarına benzer Ne sürümü android ve Google Chrome? Diğer mobil tarayıcıları veya yerelleri kontrol ettiniz mi? – Fortran

cevap

8

bu sadece ön js ile dosya yükleme bölümünü bitirmek bu

window.onload = function() { 
 
    if (window.File && window.FileList && window.FileReader) { 
 
    var filesInput = document.getElementById("uploadImage"); 
 
    filesInput.addEventListener("change", function(event) { 
 
     var files = event.target.files; 
 
     var output = document.getElementById("result"); 
 
     for (var i = 0; i < files.length; i++) { 
 
     var file = files[i]; 
 
     if (!file.type.match('image')) 
 
      continue; 
 
     var picReader = new FileReader(); 
 
     picReader.addEventListener("load", function(event) { 
 
      var picFile = event.target; 
 
      var div = document.createElement("div"); 
 
      div.innerHTML = "<img class='thumbnail' src='" + picFile.result + "'" + 
 
      "title='" + picFile.name + "'/>"; 
 
      output.insertBefore(div, null); 
 
     });   
 
     picReader.readAsDataURL(file); 
 
     } 
 

 
    }); 
 
    } 
 
}
<input type="file" id="uploadImage" name="termek_file" class="file_input" multiple/> 
 
<div id="result" class="uploadPreview">

+0

giriş için teşekkürler Aynı hata tam olarak, sadece şimdi göstermek için 2-3 saniye sürer. – odedta

2

O mobil tarayıcılar bazı yazı okudum desteği alma multiple nitelik tam olarak emin değilim size yardımcı olabilir deneyin herhangi bir şekilde desteklemiyor ya da standart değil, herhangi bir şekilde birden çok resim göndermek istiyorsanız; Aşağıdaki kodun tamamını

İlk Adım;

Sen FileReader

document.getElementById("filesToUpload").onchange = function() { 
    var fileIndex = 0; 
    for (var x= 0; x < input.files.length; x++) { 
     //add to list 
     var li = document.createElement('li'); 
     //Filename listing 
     li.setAttribute('id','li_'+x); 
     li.innerHTML = 'File ' + (x + 1) + ': ' + input.files[x].name; 
     list.append(li); 
     //FileReader create and set onload event 
     var reader = new FileReader(); 
     reader.onload = function (data) { 
      data.target.result; 
     } 
     //Read file 
     reader.readAsDataURL(input.files[x]); 
    } 
} 

İkinci Adım ile lokal olarak

Çoklu dosya yükleme gibi tarayıcıda yük için FileReader kullanmalıdır

Her dosyanın

için base64 veri olarak textarea görüntü içeriğini ayarlayabilirsiniz
reader.onload = function (data) { 
    //.... 
    //Split base64 data from DataURL (// "data:image/png;base64,.....) 
    var b64 = data.target.result.split(',')[1]; 
    var b64Input = document.createElement('textarea'); 
    b64Input.setAttribute('name','file64[]'); 
    b64Input.value = b64; 
    //... 
} 

Third Ste p

Sonra & JavaScript'i

<input name="filesToUpload[]" id="filesToUpload" type="file" multiple /> 
<form method="post" action="multipleFileUpload.php" enctype="multipart/form-data" id="formMultipleFileUpload"> 
<ul id="fileList"> 

</ul> 
<input type="submit" value="Upload" id="btnUpload"> 
</form> 
<script type="text/javascript"> 
var input = document.getElementById('filesToUpload'); 
var list = document.getElementById('fileList'); 
document.getElementById("filesToUpload").onchange = function() { 
    var fileIndex = 0; 
    for (var x= 0; x < input.files.length; x++) { 
     //add to list 
     var li = document.createElement('li'); 
     li.setAttribute('id','li_'+x); 
     li.innerHTML = 'File ' + (x + 1) + ': ' + input.files[x].name; 
     list.append(li); 
     var reader = new FileReader(); 
     reader.onload = function (data) { 
      var li = document.getElementById('li_'+fileIndex); 
      var previewImg = document.createElement('img'); 
      previewImg.setAttribute('width','50'); 
      previewImg.setAttribute('height','50'); 
      li.append(previewImg); 
      previewImg.src = data.target.result; 
      var b64 = data.target.result.split(',')[1]; 
      var b64Input = document.createElement('textarea'); 
      b64Input.setAttribute('name','file64[]'); 
      b64Input.value = b64; 
      li.append(b64Input); 
      var fileName = document.createElement('input'); 
      fileName.setAttribute('name','fileName[]'); 
      fileName.value = input.files[fileIndex].name; 
      li.append(fileName); 
      fileIndex++; 
     } 
     reader.readAsDataURL(input.files[x]); 
    } 
} 

görüntünün

for($i = 0; $i<count($_POST["fileName"]);$i++){ 
    echo $_POST["fileName"][$i]."<br>"; 
    //decode base64 content and put file 
    file_put_contents($_POST["fileName"][$i], base64_decode($_POST["file64"][$i])); 
} 

Tam Kod

HTML olarak içerik php dosyası bütün verilere göndermek ve kaydedebilir

PHP (multipleFileUpload.php)

<?php 
for($i = 0; $i<count($_POST["fileName"]);$i++){ 
    echo $_POST["fileName"][$i]."<br>"; 
    file_put_contents($_POST["fileName"][$i], base64_decode($_POST["file64"][$i])); 
} 
?> 

Çalışma ekran görüntüsü, tarayıcı bu sorunu, 1 neden olabilecek birden fazla senaryoları olabilir bellek yetersiz artık sonuç devlet olarak Preview Screen Uploaded Screen

+0

Çözümünüzü buraya koydum: http://odedta.com/projects/jqueryfileupload/ferhat/ - Yine de aynı hatayı alıyorum, ancak bir gelişme var, şimdi 3 dosya seçebiliyorum ve tarayıcı tanıyor 3 oradaki eklentilerin çoğunda asla bitmeyen dosyalar. – odedta

+0

Merhaba @odedta Sunucunuzda bir sorun olduğunu düşünüyorum çünkü bu 'https: // jsfiddle.net/87c1put3/'gibi görünmeli ve yüklenen dosyamı da görebilirsiniz. –

+0

@odedta Telefonumda jsfidle örneği ile test edilen ekran görüntüsünü ekledim ve yordam sunucusu olarak güncellenen dosyalar. –

İlgili konular