2017-10-15 4 views
0

Im essayant de télécharger des images de l'application Android au serveur Php. J'ai trouvé moyen de télécharger l'image en l'encodant en base64 en utilisant C# et de le décoder à nouveau en utilisant le décodeur php base64. Tout fonctionne bien, je peux télécharger l'image sur le serveur avec succès, mais après que je le télécharger, les images dose pas ouvrir en utilisant une visionneuse d'images i eu cette erreurTélécharger l'image de android au serveur php dans Xamarin C#

n'a pas pu ouvrir ce fichier

cela fonctionne seulement dans l'explorateur d'internet de chrome ou de bord ou n'importe quel autre explorateur d'Internet. J'espère que vous pourriez me aider à l'ouvrir avec visionneuse d'images comme les fenêtres d'images viewer mon code C# est comme:

public override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
{ 
    if ((requestCode == PickImageId) && (resultCode == Result.Ok) && (data != null)) 
    { 
     Stream stream = Activity.ContentResolver.OpenInputStream(data.Data); 
     Bitmap bitmap = BitmapFactory.DecodeStream(stream); 
     MemoryStream memStream = new MemoryStream(); 
     bitmap.Compress(Bitmap.CompressFormat.Webp, 100, memStream); 
     byte[] picData = memStream.ToArray(); 
     WebClient client = new WebClient(); 
     Uri uri = new Uri(statics_class.request_url+"request.php"); 
     NameValueCollection parameters = new NameValueCollection(); 
     parameters.Add("Image", Convert.ToBase64String(picData)); 
     parameters.Add("Image_id", image_id.ToString()); 
     parameters.Add("user_id", user_id); 
     client.UploadValuesAsync(uri, parameters); 
     client.UploadValuesCompleted += Client_UploadValuesCompleted; 
    } 
} 

Et mon code php:

if (isset($_POST['Image']) && isset($_POST['Image_id']) && isset($_POST['user_id'])) 

{ 

    $user_id = $_POST['user_id'] ; 
    $Image_id = $_POST['Image_id'] ; 
    $now = DateTime::createFromFormat('U.u',microtime(true)); 
    $id = $now->format('YmdHisu'); 
    $upload_folder = "upload/$user_id"; 
    if(!is_dir($upload_folder)){ 
     mkdir($upload_folder); 
    } 
    $path = "upload/$user_id/$id.jpg"; 

    $image = $_POST['Image'] ; 


    if(file_put_contents($path , base64_decode($image)) != false){ 

      printf('<img src="data:image/jpg;base64,%s" />', $image); 
     echo "successed "; 
     exit; 
    }else{ 
     echo "failed"; 
    } 


} 

Répondre

1

Ne pas utiliser Bitmap.CompressFormat.Webp, mais Bitmap.CompressFormat.PNG (ou jpeg si la compression photo avec perte est acceptable). WebP est un format d'image relativement nouveau qui n'est pas encore largement supporté.