如何在上传文件时将数据发送到服务器?

时间:2014-11-08 12:00:55

标签: javascript php file-upload

当用户将图片上传到服务器时,图片必须像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>

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

最后我开发了一个解决方案。

  1. 添加一个类&#34; fileUpload&#34;到将保存要上载的文件的输入元素。
  2. 将id设置为something-pkUser。我坐着id =&#34; fileUpload-1&#34;动态创建了whit php。
  3. 对上面的javascript代码稍作修改。转到函数uploadFile()并创建一个参数&#34; n&#34;。它就像是uploadFile(n)。
  4. 在此函数内部转到fd.append(...,...)部分并更改第一个第二个参数&#39; fileToUpload&#39;对于&#34; n&#34;,您已创建。您将拥有以下内容:

    fd.append(&#34; fileToUpload&#34;,document.getElementById(&#39; fileToUpload&#39;)。files [0]);

  5. 由此改变:

    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.";
        }    
    

    最后这个效果很好!我可以发送用户的主键并按我的意愿存储。