Invio di file tramite HTTP al servizio web

0

Sono un po 'frustrato per la mancanza di informazioni su questo online. Ecco il problema:

Mi occupo della creazione di un'applicazione iOS che manda i dati audio avanti e indietro tra il server e l'app. L'audio è in file di piccole dimensioni e quindi non ha bisogno di essere trasmesso in streaming, ma può essere inviato. In questo momento sto usando un server TCP che ho scritto per gestire applicazioni come questa. Tuttavia, voglio mantenere il sistema il più semplice possibile e scrivere il tuo server e i tuoi socket client possono diventare un po 'complessi e lasciare spazio a crash. Nel complesso rallenta lo sviluppo perché devo tenere conto della struttura dei pacchetti e di altre cose.

La mia domanda è: posso scrivere un servizio web ASPX o PHP che mi permetta di passare i file avanti e indietro tramite GET o POST?

    
posta Serguei Fedorov 16.11.2012 - 22:34
fonte

3 risposte

2

Dove stai cercando informazioni e non trovandole? Il caricamento di un file in una pagina Web PHP è un argomento che è stato trattato diverse volte sul web nel corso degli anni. Tant'è che anche w3schools ha un esempio.

Dal lato client (esempio HTML ma è solo un POST HTTP di base):

<form action="http://example/com/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="file" /> 
    <input type="submit" name="submit" value="Submit" />
</form>

Il lato server delle cose in PHP:

<?php
    if ($_FILES["file"]["error"] > 0) {
        echo "Error: " . $_FILES["file"]["error"] . "<br />";
    } else {
        echo "Upload: " . $_FILES["file"]["name"] . "<br />";
        echo "Type: " . $_FILES["file"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
        echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
?>

Per quanto riguarda l'invio dei file al client, è sufficiente archiviarli in una posizione web assecible ed è una richiesta GET di base:

GET http://example.com/myfile.wav
    
risposta data 16.11.2012 - 23:32
fonte
2

Un'altra scelta converte il contenuto del file in base64 e lo invia come campo modulo.

In PHP il codice sarebbe:

<?php
$data = file_get_contents('path_to_file');
$encripData = base64_encode($data);

$filename = 'my_file.txt';

$fields = array(
    'content'    =>   $encripData,
    'name'       =>   $filename,
);

$fieldsQueryString = http_build_query($fields);

// you should have curl library install here
$ch = curl_init("http://myserver/receive.php");
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldsQueryString);

curl_exec($ch);

Lo script PHP per ricevere il file sarà:

<?php

$content = $_POST['content'];
$name = $_POST['name'];

file_put_contents($name, base64_decode($content));

Non ho testato il codice ma è una buona idea dell'attrezzo.

    
risposta data 17.11.2012 - 05:56
fonte
1

Per il lato ASP, sicuro di poter scrivere servizi web che ti permetteranno di fare ciò che stai suggerendo. L'ultimo e più grande di ASP.NET presenta alcuni miglioramenti per semplificare l'intero approccio ai servizi Web.

Non è il percorso più efficiente, ma funzionerà in base alle tue esigenze. Questa pagina dal sito ASP.NET ha alcune esercitazioni che appaiono direttamente correlate a ciò che stai cercando di fare.

Avrai comunque bisogno che il client gestisca il wrapping degli oggetti sonori e poi li spinga attraverso la richiesta HTTP.

    
risposta data 16.11.2012 - 23:22
fonte

Leggi altre domande sui tag