2014-11-08 53 views
-3

当用户上传图片到服务器时,图片必须像pkUsre.extention,exemple 1.jpg那样存储,其中数字1是用户主键。 我有以下代码工作正常,上传文件,但我不知道如何发送pkUser到图片的服务器。任何想法如何做到这一点?如何在上传文件时将数据发送到服务器?

//Html code 
    <form id="form1" enctype="multipart/form-data" method="post" > 
    <div class="row"> 
     <input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();"/> 
    </div> 
    <div id="fileName"></div> 
    <div id="fileSize"></div> 
    <div id="fileType"></div> 
    <div class="row"> 
     <input type="button" id="btnSd" value="Upload" /> 
    </div> 
    <div id="progressNumber"></div> 
    </form> 

//PHP code 
    if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], "pic/".  basename($_FILES['fileToUpload']['name']))) { 
     echo basename($_FILES['fileToUpload']['name']); 
    } 
    else { 
     echo "There was a problem uploading your file - please try again."; 
    } 

//Javascript code 
    <script type="text/javascript"> 
     function fileSelected() { 
     var file = document.getElementById('fileToUpload').files[0]; 
     if (file) { 
      var fileSize = 0; 
      if (file.size > 1024 * 1024) 
      fileSize = (Math.round(file.size * 100/(1024 * 1024))/100).toString() + 'MB'; 
      else 
      fileSize = (Math.round(file.size * 100/1024)/100).toString() + 'KB'; 

      document.getElementById('fileName').innerHTML = 'Name: ' + file.name; 
      document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize; 
      document.getElementById('fileType').innerHTML = 'Type: ' + file.type; 
     } 
     } 

     function uploadFile() { 
     var fd = new FormData(); 
     fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]); 
     var xhr = new XMLHttpRequest(); 
     xhr.upload.addEventListener("progress", uploadProgress, false); 
     xhr.addEventListener("load", uploadComplete, false); 
     xhr.addEventListener("error", uploadFailed, false); 
     xhr.addEventListener("abort", uploadCanceled, false); 
     xhr.open("POST", "uploadFoto.php"); 
     xhr.send(fd); 
     } 

     function uploadProgress(evt) { 
     if (evt.lengthComputable) { 
      var percentComplete = Math.round(evt.loaded * 100/evt.total); 
      document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%'; 
     } 
     else { 
      document.getElementById('progressNumber').innerHTML = 'unable to compute'; 
     } 
     } 

     function uploadComplete(evt) { 
     /* This event is raised when the server send back a response */ 
     alert(evt.target.responseText); 
     } 

     function uploadFailed(evt) { 
     alert("There was an error attempting to upload the file."); 
     } 

     function uploadCanceled(evt) { 
     alert("The upload has been canceled by the user or the browser dropped the connection."); 
     } 
    </script> 
    <script type="text/javascript"> 
     $(document).on("click", "#btnSd", function(){ 
      uploadFile();  
     });  
    </script> 

回答

0

最后,我开发的解决方案。

  1. 将“fileUpload”类添加到将保存要上载的文件的输入元素。
  2. 设置一个id为something-pkUser。我坐在ID =“fileUpload-1”动态创建惠普PHP。
  3. 对上面的JavaScript代码做一点改动。转到函数uploadFile()并创建一个参数“n”。它会像那个uploadFile(n)。
  4. 在这个函数中,转到fd.append(...,...)部分,并为您创建的“n”更改第一个第二个参数'fileToUpload'。您将有以下:

    fd.append(“fileToUpload”,document.getElementById('fileToUpload')。files [0]);

这个改变:

fd.append(n, document.getElementById(n).files[0]); 

现在你必须改变jQuery代码:

是之前:

$(document).on("click", "#btnSd", function(){ 
     uploadFile();  
    }); 

现在会是这样的:

$(document).on("click", "#btnSd", function(){ 
     uploadFile($(".fileToUpload").attr('id'));  
    }); 

最后,ajax会发送数据到服务器。我们可以用php substrigs函数清除字符串。这是我的解决方案:

foreach ($_FILES as $key => $value) { 
$arrFile = $key;       
$pkUser = substr($arrFile,(int)$pos=strpos($arrFile, "-")+1);  
$filename=$_FILES[$arrFile]['name']; 
$ext = substr($filename,strpos($filename, ".")); 
} 

$finalName=$pkUser.$ext; 

    if (move_uploaded_file($_FILES[$arrFile]['tmp_name'], "pic/".$finalName)) { 
     echo $finalName; 
    } 
    else { 
     echo "There was a problem uploading your file - please try again."; 
    }  

最后这个作品很好!我可以发送用户的主键并按需要存储。

0
only file uplod name in server database and move to file in folder user_post. 
    file copy in filder and only name is database save. 


    function getuniqkey($special='') 
     { 
      return md5(date("Y-m-d H:i:s").uniqid(rand(), true).time().$special); 
     } 
    if(isset($_FILES["fileToUpload"])) 
     { 
      $tmp_name = $_FILES["fileToUpload"]["tmp_name"]; 
      $name1 = $_FILES["fileToUpload"]["name"];  
      $datasheet_new_name=getuniqkey($tmp_name).substr($name1,strrpos($name1,".")); 
      if(copy($_FILES["fileToUpload"]["tmp_name"], "user_post/".$datasheet_new_name)) 
      { 
       $file_name = "http://domain name.com/user_post/{$datasheet_new_name}"; 
      } 
      else 
      { 
       echo'user file not upload.'; 


      } 

    }   
    echo $file_name; 
+0

嗨Prashant,你可以重写你的想法beginnig?它被打断了。我无法理解完整的想法。 – zwitterion 2014-11-08 12:14:36

+0

只有文件名存储在数据库中创建一个文件夹user_post文件拷贝到这个文件夹中试试这个代码。 – 2014-11-08 12:31:27

+0

微粒文件夹路径http:// domain name.com/user_post/ 您的域名和文件夹名称。 – 2014-11-08 12:32:20

相关问题