PHP SOAP Transferring Files

前端 未结 3 2024
天命终不由人
天命终不由人 2020-12-06 02:22

I am trying to learn how to transfer files (.zip files) between a client and server using PHP and SOAP. Currently I have a set up that looks something like this:

<         


        
相关标签:
3条回答
  • 2020-12-06 02:29

    Transferring files over SOAP is something that gets everybody the first time (myself included). You need to open and read the document and then transfer it as a string. Here's how I would do it.

    $handle = fopen("mypackage.zip", "r");
    $contents = fread($handle, filesize("mypackage.zip"));
    fclose($handle);
    
    //$contents now holds the byte-array of our selected file
    

    Then send $contents as your string through SOAP and reassemble it on the other side.

    0 讨论(0)
  • 2020-12-06 02:34

    In client.php, change this:

    if($_POST['submit'])
    {
    
       ...
    
    }   
    $client=new soapclient($wsdl) or die("Error");   // Connect the SOAP server
    $response = $client->__call('upload_file',array($decodeContent,$filename)) or die("Error");  //Send two inputs strings. {1} DECODED CONTENT {2} FILENAME
    

    to this:

    if($_POST['submit'])
    {
       ...
    
       $client=new soapclient($wsdl) or die("Error");   // Connect the SOAP server
       $response = $client->__call('upload_file',array($decodeContent,$filename)) or die("Error");  //Send two inputs strings. {1} DECODED CONTENT {2} FILENAME
    }
    
    0 讨论(0)
  • 2020-12-06 02:56

    To be more clear I have posted both the server.php code and client.php code. Please see below:

    ## server.php ##

    require_once('lib/nusoap.php'); //include required class for build nnusoap web service server
    
      // Create server object
       $server = new soap_server();
    
       // configure  WSDL
       $server->configureWSDL('Upload File', 'urn:uploadwsdl');
    
       // Register the method to expose
        $server->register('upload_file',                                 // method
            array('file' => 'xsd:string','location' => 'xsd:string'),    // input parameters
            array('return' => 'xsd:string'),                             // output parameters
            'urn:uploadwsdl',                                            // namespace
            'urn:uploadwsdl#upload_file',                                // soapaction
            'rpc',                                                       // style
            'encoded',                                                   // use
            'Uploads files to the server'                                // documentation
        );
    
        // Define the method as a PHP function
    
        function upload_file($encoded,$name) {
            $location = "uploads\\".$name;                               // Mention where to upload the file
            $current = file_get_contents($location);                     // Get the file content. This will create an empty file if the file does not exist     
            $current = base64_decode($encoded);                          // Now decode the content which was sent by the client     
            file_put_contents($location, $current);                      // Write the decoded content in the file mentioned at particular location      
            if($name!="")
            {
                return "File Uploaded successfully...";                      // Output success message                              
            }
            else        
            {
                return "Please upload a file...";
            }
        }
    
        // Use the request to (try to) invoke the service
        $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
        $server->service($HTTP_RAW_POST_DATA); 
    

    =====================================================================

    ## client.php ##

    require_once('lib/nusoap.php'); //include required class for build nnusoap web service server
       $wsdl="http://localhost:81/subhan/webservice3/server.php?wsdl";  // SOAP Server
    
       if($_POST['submit'])
       {
           $tmpfile = $_FILES["uploadfiles"]["tmp_name"];   // temp filename
           $filename = $_FILES["uploadfiles"]["name"];      // Original filename
    
           $handle = fopen($tmpfile, "r");                  // Open the temp file
           $contents = fread($handle, filesize($tmpfile));  // Read the temp file
           fclose($handle);                                 // Close the temp file
    
           $decodeContent   = base64_encode($contents);     // Decode the file content, so that we code send a binary string to SOAP
        }   
    
       $client=new soapclient($wsdl) or die("Error");   // Connect the SOAP server
       $response = $client->__call('upload_file',array($decodeContent,$filename)) or die("Error");  //Send two inputs strings. {1} DECODED CONTENT {2} FILENAME
    
       // Check if there is anny fault with Client connecting to Server
       if($client->fault){
            echo "Fault {$client->faultcode} <br/>";
            echo "String {$client->faultstring} <br/>";
       }
       else{
            print_r($response); // If success then print response coming from SOAP Server
       }
    
    
    <form name="name1" method="post" action="" enctype="multipart/form-data">
    <input type="file" name="uploadfiles"><br />
    <input type="submit" name="submit" value="uploadSubmit"><br />
    </form>
    

    =================================================

    All you need to do is download the nusoap.php which will be seen in soap library http://sourceforge.net/projects/nusoap/

    This is fully tested and it will 100% work without fail.

    0 讨论(0)
提交回复
热议问题