Autore Topic: visualizzare immagine inserita nel mysql  (Letto 611 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
visualizzare immagine inserita nel mysql
« il: 22 Agosto 2015, 23:35:30 CEST »
0
Ciao a tutti!

dopo aver provato ad inserire e visualizzare i dati inseriti solo come string, in questo momento stò provando ad inserire le immagini nel mysql tramite php e json.

Questa volta ho creato un table di nome persone con id, nome, cognome image.

nome e cognome ho inserito come valore "varchar" mentre se non erro ad image ho inserito il valore "BLOB"

per inserire i dati  nel mysql e convertire l'immagine in "BOB", in php scrivo questo:

Codice (Java): [Seleziona]
<?php
error_reporting(~0);
$db = new mysqli('localhost' , 'root' , '' , 'android_mysql');

$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$base= $_REQUEST['image'];
$buffer = base64_decode($base);

$buffer = mysql_real_escape_string($buffer);

$output = array();

if($db->query("INSERT INTO persone (nome , cognome , image) VALUES ('$nome' , '$cognome' , '$base')"))
{
       
        $output['success'] = "1";

}

else
{       $output['success'] = 0;
        echo "No success";
}

?>

da quello che sembra l'inserimento dei dati avviene con successo.

Subito dopo controllo i dati dal browser tramite il "select dei dati" e mi appare il nome cognome che ho inserito, e come immagine mi appare una stringa lunghissima con una serie di numeri e lettere.
Ora non so i l'immagine è stata inserita correttamente o no!.

se i codice del "BLOB" è stato inserito correttamente...vorrei fa apparire l'immagine che ho inserito.

per far apparire tutti i dati che ho selezionato dalla listview, scrivo questo:

Codice (Java): [Seleziona]
records=new ArrayList<Product>();
                listProduct=(ListView)findViewById(R.id.listView1);
                adapter=new CustomAdapter(context, R.layout.activity_row,R.id.nome_text, records);
                listProduct.setAdapter(adapter);
                listProduct.setOnItemClickListener(new OnItemClickListener() { 
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                //String idString = ((TextView) view.findViewById(R.id.id_text)).getText().toString();
                                int num = records.get(position).getId();
                                String nome = records.get(position).getNome();
                                String cognome = records.get(position).getCognome();
                                image = records.get(position).getImage();
                               
                               
                                String idString = String.valueOf(num);
                               
                                Toast.makeText(getApplicationContext(), idString, Toast.LENGTH_LONG).show();
                                Intent in = new Intent(getApplicationContext(), EditDataActivity.class);
                                in.putExtra("id", idString);   
                                in.putExtra("nome", nome);
                                in.putExtra("cognome", cognome);
                                in.putExtra("image", image);
                                startActivity(in);
                               
                        }
                });

in php per visualizzare i "varchar" e trasformare il "BLOB" in immagine scrivo questo:

Codice (Java): [Seleziona]
<?php
$DB_USER='root';        
$DB_PASS='';      
$DB_HOST='localhost';    
$DB_NAME='android_mysql';
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
/* check connection */
if (mysqli_connect_errno()) {
   printf("Connect failed: %s\n", mysqli_connect_error());
   exit();
}

$mysqli->query("SET NAMES 'utf8'");
$sql="SELECT * FROM persone";

$result=$mysqli->query($sql);
while($e=mysqli_fetch_assoc($result)){
       
        $name = $row["image"];
        $file = fopen($path."/".$name,"w");
   echo "File name: ".$path."$name\n";
   fwrite($file, base64_decode($image));
   fclose($file);
     $output[]=$e;
}

print(json_encode($output));
$mysqli->close();
?>

all'evento click mi appaiono tutti i campi tranne l'immagine!
ora non so se al "getImage();"  devo scrivere come stringa, come Bitmap o come byte[].

non so se la trasformazione da "BLOB" in immagine avviene correttamente oppure no.

spero di essere stato chiaro!

grazie in anticipo!


tutti possiamo programmare...basta volerlo!!!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:visualizzare immagine inserita nel mysql
« Risposta #1 il: 23 Agosto 2015, 00:06:07 CEST »
0
Evita di salvare le immagini. Crea una cartella IMG e dentro salvi le immagini. E bel DB salvi il nome del file. Molto meglio e molto più performante

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:visualizzare immagine inserita nel mysql
« Risposta #2 il: 23 Agosto 2015, 09:21:20 CEST »
0
come faccio a salvare le immagini dalla sdcard alla cartella?

sapresti darmi un link con una guida?

le guide mi escono solo come salvarle in sdcard, ma da sdcard alla cartella del server non escono!
tutti possiamo programmare...basta volerlo!!!

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:visualizzare immagine inserita nel mysql
« Risposta #3 il: 23 Agosto 2015, 10:02:11 CEST »
0
x inviare un foto al server , usa ftp invece che un parse con il php , e nel database salvi semplicemente una stringa contenente il link della foto nel formato 'http://....'

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:visualizzare immagine inserita nel mysql
« Risposta #4 il: 23 Agosto 2015, 10:31:27 CEST »
0
ok!

grazie mille!  :-)

ti farò sapere!!

tutti possiamo programmare...basta volerlo!!!

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:visualizzare immagine inserita nel mysql
« Risposta #5 il: 23 Agosto 2015, 10:42:15 CEST »
0
scusa , mi correggo non salvarlo nel formato http://
salva soltanto il nome XXXXXX.jpg

il link lo fai aggiungere in fase di lettura nella parte java .... cosi se cambi host o altro non devi correggere tutto il database   ;-)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:visualizzare immagine inserita nel mysql
« Risposta #6 il: 23 Agosto 2015, 19:02:10 CEST »
0
non ti preoccupare!!

avevo capito il concetto!  ;-)



Post unito: 24 Agosto 2015, 18:41:20 CEST
tra varie guide, ho trovato uno che funziona, ma ci sono 2 piccoli particolari che quando modifico il codice mi da errore!

il codice funzionante è questo:
Codice (Java): [Seleziona]
import java.io.File;
import java.io.FileInputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

        Button selector, upload;
        TextView filePath;
        final int PICK_FILE = 1;

        // Define this parameters as required
        String FTPHost = "88.*.*.*";
        String user = "user";
        String pass = "pass";
        final int PORT = 21;
        String filename;
        Context activity;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                activity = this;
                selector = (Button) findViewById(R.id.selectfile);
                upload = (Button) findViewById(R.id.upload);
                filePath = (TextView) findViewById(R.id.textView1);
                selector.setOnClickListener(new SelectFile());
                upload.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                new UploadFile().execute(filePath.getText().toString(),FTPHost, user, pass);

                        }
                });

        }

        private class UploadFile extends AsyncTask<String, Integer, Boolean> {

                @Override
                protected Boolean doInBackground(String... params) {
                        FTPClient client = new FTPClient();
                        try {
                                client.connect(params[1], PORT);
                                client.login(params[2], params[3]);
                                client.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
                                return client.storeFile(filename, new FileInputStream(new File(params[0])));

                        } catch (Exception e) {
                                Log.d("FTP", e.toString());
                                return false;
                        }
                }

                @Override
                protected void onPostExecute(Boolean sucess) {
                        if (sucess)
                                Toast.makeText(activity, "File Sent", Toast.LENGTH_LONG).show();
                        else
                                Toast.makeText(activity, "Error", Toast.LENGTH_LONG).show();
                }

        }

        private class SelectFile implements View.OnClickListener {

                @Override
                public void onClick(View v) {
                        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                        i.setType("file/*");
                        startActivityForResult(i, PICK_FILE);
                }

        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                if (requestCode == PICK_FILE && data.getData() != null) {
                        filePath.setText(data.getData().getPath());
                        filename = data.getData().getLastPathSegment();
                }
                super.onActivityResult(requestCode, resultCode, data);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }
}

la modifica che vado ad effettuare è nell'apertura del file, cioè invece di scrivere "i.setType("file/*");" scrivo questo:
i.setType("image/*");

quando clicco per inviare l'immagine mi esce errore!!
non capisco il perchè!  :-(

poi l'altra modifica che vorrei effettuare è l'invio del file ad una determinata cartella!
come si fa?  :-\

con questo codice me lo invia alla cartella principale!

help!
« Ultima modifica: 24 Agosto 2015, 18:41:21 CEST da paul78, Reason: Merged DoublePost »
tutti possiamo programmare...basta volerlo!!!