2015-03-28 2 views
1

Я использую приложение Android для загрузки изображения, сделанного с помощью камеры. Камера возвращает растровое изображение, которое передается в задачу загрузки. Сервер получает изображение и сохраняет его, но, похоже, он отформатирован неправильно; Я не могу просмотреть изображение. Есть ли что-то, что мне не хватает в функции Android Bitmap.compress()? Я не знаком с форматированием изображений, поэтому любая помощь wuld действительно ценится.Android: растровое изображение, загруженное через HttpURLConnection, не используется

Вот код, в котором записывается битовая карта:

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setReadTimeout(10000); 
conn.setConnectTimeout(15000); 
conn.setRequestMethod("POST"); 


conn.setDoInput(true); 
conn.setDoOutput(true); 
conn.setRequestProperty("Connection", "Keep-Alive"); 
conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
conn.setRequestProperty("imageToUpload", "ups.jpg"); 
String sUserID = Integer.toString(mUserID); 
OutputStream os = conn.getOutputStream(); 

os.write((dbHyphen + boundary + lnEnd).getBytes()); 
os.write(("Content-Disposition: form-data; name=\"p\"" + lnEnd).getBytes()); 
os.write(("Content-Type: text/plain; charset=UTF-8"+ lnEnd).getBytes()); 
os.write(lnEnd.getBytes()); 
os.write(sUserID.getBytes());os.write(lnEnd.getBytes()); 
os.write(lnEnd.getBytes()); 
os.write((dbHyphen + boundary + lnEnd).getBytes()); 
os.write(("Content-Disposition: form-data; name=\"imageToUpload\";filename=" 
     + "ups.jpg" + lnEnd).getBytes()); 
os.write((lnEnd).getBytes()); 

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
mImage.compress(Bitmap.CompressFormat.JPEG, 85, bos); 
byte[] bitmapdata = bos.toByteArray(); 

os.write(bitmapdata); 
os.write((lnEnd).getBytes()); 
os.write((dbHyphen + boundary + dbHyphen + lnEnd).getBytes()); 
os.close(); 

EDIT: Выгрузка он получил и сохранить с помощью PHP

move_uploaded_file($_FILES['imageToUpload']['tmp_name'], $file_path)) 
+0

Какой сервер? Вы обвиняете сервер или ваш код Android? – greenapps

+0

Сколько байтов в загружаемом файле? Сколько в сохраненном? – greenapps

+0

Он загружается на веб-сервер и обрабатывается через php. Буфер битмап записывается для чтения байта [4505] @ 3894 в отладчике (нужно искать значение этого синтаксиса). Файл, скопированный на мой локальный диск, составляет 4,882 байт. Он никогда не сохраняется как фактический файл на Android. –

ответ

0

Решенный вопрос. Поток данных изображения по-прежнему необходимо форматировать в файл jpeg. Необходимо изменить php на сайте.

Вот фрагмент PHP, который преобразует данные в изображение и сохраняет его.

$data = file_get_contents($_FILES['imageToUpload']['tmp_name']); 

$imageFile = imagecreatefromstring($data); 
$imageName = "test.jpeg"; 
$imageSave = imagejpeg($imageFile,$imageName,100); 
imagedestroy($imageFile); 

И пересмотренный код Android:

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(10000); 
      conn.setConnectTimeout(15000); 
      conn.setRequestMethod("POST"); 


      conn.setDoInput(true); 
      conn.setDoOutput(true); 
      conn.setRequestProperty("Connection", "Keep-Alive"); 
      conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
      conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
      conn.setRequestProperty("imageToUpload", "ups.jpg"); 
      String sUserID = Integer.toString(mUserID); 
      OutputStream os = conn.getOutputStream(); 

      os.write((dbHyphen + boundary + lnEnd).getBytes()); 
      os.write(("Content-Disposition: form-data; name=\"p\"" + lnEnd).getBytes()); 
      os.write(("Content-Type: text/plain; charset=UTF-8"+ lnEnd).getBytes()); 
      os.write(lnEnd.getBytes()); 
      os.write(sUserID.getBytes());os.write(lnEnd.getBytes()); 
      os.write(lnEnd.getBytes()); 
      os.write((dbHyphen + boundary + lnEnd).getBytes()); 
      os.write(("Content-Disposition: form-data; name=\"imageToUpload\";filename="+ "ups.jpg" + lnEnd).getBytes()); 
      os.write(("Content-Type: image/jpeg; charset=UTF-8"+ lnEnd).getBytes());//"+ lnEnd).getBytes()); 
      //os.write(("Content-Transfer-Encoding: binary" + lnEnd).getBytes()); 
      os.write((lnEnd).getBytes()); 

      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      mImage.compress(Bitmap.CompressFormat.JPEG, 25, bos); 
      byte[] bitmapdata = bos.toByteArray(); 
      int lng = bitmapdata.length; 
      os.write(bitmapdata); 
      os.write((lnEnd).getBytes()); 
      os.write((dbHyphen + boundary + dbHyphen + lnEnd).getBytes()); 
      os.close(); 
Смежные вопросы