Я пытаюсь загрузить (опубликовать) данные формы — вместе с изображением на сервер. Я пробовал следующий код, но не смог точно определить ошибку.
Код Android:
Я создаю объект класса Product в основной операции и отправляю его в фоновую операцию. Где я пытаюсь загрузить данные на сервер.
Используемые шаги:
protected String doInBackground(Products... params) {
Products pd=params[0];
Bitmap bmp=pd.getImage();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Log.e("Bitmap ","height : "+bmp.getHeight()+" Width :"+bmp.getWidth());
Log.e("Size of bmp",""+bmp.getByteCount());
bmp.compress(Bitmap.CompressFormat.JPEG,100,bos);
Log.e("Size of bos",""+bos.size());
byte[] imageToByte = bos.toByteArray();
String imageData = Base64.encodeToString(imageToByte,Base64.DEFAULT);
Log.e("Base64 encoded image",imageData);
Log.e("Status","Image Parsed");
try{
String link="*****/sellPage.php";
String data = URLEncoder.encode("uploadedimage", "UTF-8") + "=" + imageData;
Log.e("Image Data",data);
URL url = new URL(link);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
Log.e("Status", "Request Sent");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while ((line = reader.readLine()) != null) {
sb.append(line);
break;
}
Log.e("Status","Response forwarded for processing");
return sb.toString();
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
return null;
}
PHP код для чтения данных с Android и записи в файл
$imgsrc = base64_decode($_POST['uploadedimage']);
echo $imsrc;
$fp = fopen('myImage1.jpg', 'w');
fwrite($fp, $imgsrc);
if(fclose($fp)){ echo "Successful";}
else{ echo "Error uploading image";}
Выход
Файл создается на сервере, но его размер составляет всего 0 байт. Один или два раза размер файла составлял несколько сотен килобайт, но при попытке отобразить его в теге «img» ничего не получилось.
Любая помощь будет высоко оценен.
Вы можете использовать следующий код с вашим кодом для отправки изображения на сервер
mEntity = new MultipartEntity();
if (byteArray != null || bitmap != null) {
mEntity.addPart("profile_pic", new ByteArrayBody(byteArray,
"image/jpg", "" + etName.getText().toString()
+ "_profile_pic.jpg"));
а для задней части вы можете получить изображение как $_FILES['profile_pic']
. Вы получите изображение и все детали, связанные с изображением.
Других решений пока нет …