Как реализовать возможность выбора изображения в моем приложении и отправки его в удаленную базу данных (JSON + PHP)? - PullRequest
0 голосов
/ 21 декабря 2010

Я создаю приложение, похожее на мини-приложение для социальных сетей, с пользователями, которые могут быть друзьями других пользователей. У каждого пользователя есть адрес электронной почты, полное имя и т. Д. ... но теперь я хочу реализовать его и дать пользователю возможность выбрать изображение из каталога изображений телефона и сделать его своим профилем.

Это изображение необходимо отправить на удаленный сервер, и все остальные пользователи увидят это изображение, когда откроют описание этого друга.

В моем приложении я использую JSON и PHP для подключения моего приложения к удаленной базе данных, затем я предлагаю преобразовать изображение в строку и добавить в удаленную базу данных строку, представляющую строку изображения.

Я понятия не имею, как это сделать, и я не могу найти легкую помощь в Google или здесь, все, что я нахожу, слишком сложно для меня или не то, что я ищу.

Примеры кода приветствуются

1 Ответ

1 голос
/ 21 декабря 2010

Пожалуйста, никогда не храните файл непосредственно в поле базы данных.Файл принадлежит на диске в каталоге на сервере.Простой как .Все, что хранится в базе данных, - это местоположение файла (строка) - это уменьшает размер ваших таблиц и помогает увеличить время чтения запросов.

Для загрузки с Android необходимо отправить его в виде потока байтов.*

Пример кода

HttpURLConnection conn = null;DataOutputStream dos = null;DataInputStream inStream = null;
Строка exsistingFileName = "path_to_file";

                 String lineEnd = "\r\n";
                 String twoHyphens = "--";
                 String boundary =  "*****";

                 int bytesRead, bytesAvailable, bufferSize;
                 byte[] buffer;
                 int maxBufferSize = 1*1024*1024;
                 String urlString = urls[i];


                 //get the file size here
                 File f = new File(exsistingFileName);
                 long fileSize = f.length();
                 FileInputStream fileInputStream = new FileInputStream(f);

                  // open a URL connection to the Servlet
                  URL url = new URL(urlString);

                  // Open a HTTP connection to the URL
                  conn = (HttpURLConnection) url.openConnection();
                  //add the cookie

                  // Allow Inputs
                  conn.setDoInput(true);

                  // Allow Outputs
                  conn.setDoOutput(true);

                  // Don't use a cached copy.
                  conn.setUseCaches(false);

                  // Use a post method.
                  conn.setRequestMethod("POST");
                  conn.setRequestProperty("Connection", "Keep-Alive");
                  conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);

                  dos = new DataOutputStream( conn.getOutputStream() );
                  dos.writeBytes(twoHyphens + boundary + lineEnd);
                  dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + exsistingFileName +"\"" + lineEnd);
                  dos.writeBytes("Content-Type: image/jpeg"+ lineEnd); 
                  dos.writeBytes(lineEnd);

                  // create a buffer of maximum size
                  bytesAvailable = fileInputStream.available();
                  bufferSize = Math.min(bytesAvailable, maxBufferSize);
                  buffer = new byte[bufferSize];

                  // read file and write it into form...
                  bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                  while (bytesRead > 0)
                  {
                      dos.write(buffer, 0, bufferSize);
                      bytesAvailable = fileInputStream.available();
                      bufferSize = Math.min(bytesAvailable, maxBufferSize);
                      bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                  }
                  // send multipart form data necesssary after file data...
                  dos.writeBytes(lineEnd);
                  dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                  // close streams
                  fileInputStream.close();
                  dos.flush();
                  dos.close();

                 //------------------ read the SERVER RESPONSE

                   inStream = new DataInputStream ( conn.getInputStream() );
                   String str;
                   while (( str = inStream.readLine()) != null)
                   {
                        Log.d(TAG,"Server Response"+str);
                   }
                   inStream.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...