Android:上传到服务器的图像始终为 0 字节
Posted
技术标签:
【中文标题】Android:上传到服务器的图像始终为 0 字节【英文标题】:Android : Image uploaded to server is always 0 bytes 【发布时间】:2015-10-19 02:13:20 【问题描述】:我正在尝试将表单数据连同图像一起上传(发布)到服务器。我尝试了以下代码,但无法查明错误。
Android 代码:
我正在主活动中创建一个 Product 类的对象并将其发送到后台活动。我正在尝试将数据上传到服务器的位置。
使用的步骤:
-
从图库中浏览图片并显示在图片视图中。
在点击主活动中的“上传”按钮时,会转换
图像到位图并将其设置在 Product 类的对象中
启动了后台活动并通过了产品引用
在第 2 步中创建
从产品对象中获取位图,将其转换为字节
数组.. 然后使用 Base64 转换为字符串。
将数据发布到服务器。
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 代码
$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 字节。一两次文件只有几百 KB,但是当我尝试在“img”标签中显示它时没有输出。
任何帮助将不胜感激。
【问题讨论】:
不要将“文件”视为 POST。 php.net/manual/en/reserved.variables.files.php 您好 Fred,感谢您的快速回复。那么我应该将文件作为 MultipartEntity 发送,然后使用 $_FILES 将其保存在服务器端吗? 不客气。完全正确。 所以尝试使用$_FILES['uploadedimage']
而不是$_POST['uploadedimage']
,但我无法在android 方面提供帮助。 @HarshBafna 在您的打开 PHP 标记(例如 <?php error_reporting(E_ALL); ini_set('display_errors', 1);
)之后将错误报告添加到文件顶部,然后是其余代码,以查看它是否产生任何结果。
@Fred-ii:是的,我正在尝试该方法(MultipartEntity)...需要更改代码...目前我将图像数据作为字符串(Base 64 编码)而不是作为文件,因此 $_FILES 无法使用此代码。我只是想知道这种方法的错误。
【参考方案1】:
您可以将以下代码与您的代码一起用于将图像发送到后端
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']
的图像。您将获得图像以及与图像相关的所有详细信息。
【讨论】:
以上是关于Android:上传到服务器的图像始终为 0 字节的主要内容,如果未能解决你的问题,请参考以下文章