通过php move_uploaded_file从Android应用上传图片

时间:2017-05-11 05:14:34

标签: php android image image-uploading

我试图将图片文件从我的Android应用上传到服务器。这是我的php文件,它处理来自我的网站和iOS应用程序的传入图像,用于move_uploaded_file功能:

<?php include '../../../init.php';

  $post_id = $_GET['post_id'];

  $image_temp   = $_FILES['image']['tmp_name'];
  $image_name   = $_FILES['image']['name'];
  $image_ext    = strtolower(end(explode('.', $image_name)));

  upload_page_image($image_temp, $image_ext, $post_id);

现在,在android中我遇到了Base64编码字符串:

  params.put("image",imageToString(bitmap));

然后,我把它带到我的PHP文件中:

  <$php
  .... 
  $image = base64_decode(_POST['image']);
  ...

但现在,如何将其制成$_FILES['image']['temp_name']$_FILES['image']['name']?我经历的所有其他示例都使用file_put_contents。我需要它move_uploaded_files

感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:0)

您必须使用多部分表单数据提交图片才能在php中使用 move_uploaded_files

答案 1 :(得分:0)

好的,这是我经历过的最困难的事情。问题是,当我使用php函数file_put_contents()时,它首先在android应用程序端使一切变得简单,只需将位图转换为Base64并将其传递给php文件。但是...... 在这个过程中丢失了一件非常重要的事情 ....使用$exif['Orientation']exif_read_data就是ExifInterface exifReader = new ExifInterface(mFilePath); exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1); 。此参数不再存在。

现在,当回到Android应用程序并尝试在将文件发送到php之前获取图像方向时,标准函数如下:

InputStream is = getActivity().getContentResolver().openInputStream(originalUri);
int orientation = new ImageHeaderParser(is).getOrientation();

..或类似的不起作用。它总是返回0.总是

解决方案来自使用Glide https://github.com/bumptech/glide库并使用以下方式获取当前图像方向:

dependencies {
compile project(':cropper')
compile 'com.google.android.gms:play-services:+'   <-- choose either one
compile files('libs/StartAppInApp-2.4.7.jar')
compile files('libs/google-play-services.jar')     <-- choose either one
compile 'com.android.support:multidex:1.0.1' 
}

获得方向后,您将图像作为Base64和方向编号传递,然后处理上传并进行方向更改等。