Java 服务器中未生成/上载映像

Java 服务器中未生成/上载映像,java,php,android,web-services,server,Java,Php,Android,Web Services,Server,我正在开发一个android应用程序,我想在服务器(免费服务器000webhost)上保存图像。为此,我使用base64将图像编码为字符串。并使用volley使用POST方法发送此字符串。 但是映像没有在服务器端生成。谁能告诉我怎么了 upload.php <?php $servername = "localhost"; $database = "id8258200_image"; $username = "id8258200_qmine1"; $password = ""; $co

我正在开发一个android应用程序,我想在服务器(免费服务器000webhost)上保存图像。为此,我使用base64将图像编码为字符串。并使用volley使用POST方法发送此字符串。 但是映像没有在服务器端生成。谁能告诉我怎么了

upload.php

<?php

$servername = "localhost";
$database = "id8258200_image";
$username = "id8258200_qmine1";
$password = "";


$conn = mysqli_connect($servername, $username, $password, $database);


if (!$conn) {
   die("Connection failed: " . mysqli_connect_error());
 }

echo "Connected successfully";

 if(isset($_POST["image"])){

$encoded_string = $_POST["image"];

$image_name="img";
$decoded_string = base64_decode($encoded_string);

$path = "image/$image_name.jpeg";

$file = fopen($path, 'wb');

$is_written = fwrite($file, $decoded_string);
fclose($file);
echo "success";
 }
 else {
      echo "error";
 }
?>

Mainactivity.java

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

public static final String UPLOAD_URL = "https://qmine.000webhostapp.com/question/upload.php";


private int PICK_IMAGE_REQUEST = 1;

private Button buttonChoose;
private Button buttonUpload;
private Button buttonView;

private ImageView imageView;

private Bitmap bitmap;

private Uri filePath;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buttonChoose = (Button) findViewById(R.id.buttonChoose);
    buttonUpload = (Button) findViewById(R.id.buttonUpload);
    buttonView = (Button) findViewById(R.id.buttonViewImage);

    imageView = (ImageView) findViewById(R.id.imageView);

    buttonChoose.setOnClickListener(this);
    buttonUpload.setOnClickListener(this);
    buttonView.setOnClickListener(this);
}

private void showFileChooser() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {

        filePath = data.getData();
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            imageView.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public String getStringImage(Bitmap bmp) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] imageBytes = baos.toByteArray();
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
    Log.d("tr", "qwerty" + encodedImage);
    return encodedImage;
}

private void uploadImage() {

    RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
    StringRequest request = new StringRequest(Request.Method.POST, UPLOAD_URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(), "errorrrr", Toast.LENGTH_SHORT).show();
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            Map<String, String> Params = new HashMap<String, String>();
            String img = getStringImage(bitmap);
            Log.d("qw", "aasas" + img);
            Params.put("image", img);
            return Params;

        }

    };

    queue.add(request);

}

@Override
public void onClick(View v) {
    if (v == buttonChoose) {
        showFileChooser();
    }

    if (v == buttonUpload) {
        uploadImage();
    }

    if (v == buttonView) {
        viewImage();
    }
}

private void viewImage() {
    // startActivity(new Intent(this, ImageListView.class));
}
}
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.content.Intent;
导入android.database.Cursor;
导入android.graphics.Bitmap;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.provider.MediaStore;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Base64;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.Toast;
导入com.android.volley.AuthFailureError;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入java.io.ByteArrayOutputStream;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
公共类MainActivity扩展AppCompatActivity实现View.OnClickListener{
公共静态最终字符串上载\u URL=”https://qmine.000webhostapp.com/question/upload.php";
私有int PICK_IMAGE_REQUEST=1;
私人按钮按钮;
私人按钮按钮;
私人按钮视图;
私人影像视图;
私有位图;
私有Uri文件路径;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButtonCoose=(按钮)findViewById(R.id.ButtonCoose);
buttonUpload=(Button)findViewById(R.id.buttonUpload);
buttonView=(按钮)findViewById(R.id.buttonView图像);
imageView=(imageView)findViewById(R.id.imageView);
ButtonCoose.setOnClickListener(此);
buttonUpload.setOnClickListener(这个);
buttonView.setOnClickListener(此);
}
私有void showFileChooser(){
意图=新意图();
intent.setType(“image/*”);
intent.setAction(intent.ACTION\u GET\u CONTENT);
startActivityForResult(Intent.createChooser(Intent,“选择图片”),PICK\u IMAGE\u请求);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==PICK\u IMAGE\u REQUEST&&resultCode==RESULT\u OK&&data!=null&&data.getData()!=null){
filePath=data.getData();
试一试{
位图=MediaStore.Images.Media.getBitmap(getContentResolver(),filePath);
设置图像位图(位图);
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
公共字符串getStringImage(位图bmp){
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG,100,baos);
byte[]imageBytes=bas.toByteArray();
字符串encodedImage=Base64.encodeToString(imageBytes,Base64.DEFAULT);
Log.d(“tr”、“qwerty”+encodedImage);
返回图像;
}
私有void uploadImage(){
RequestQueue=Volley.newRequestQueue(getApplicationContext());
StringRequest=newStringRequest(request.Method.POST,UPLOAD\uURL,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(getApplicationContext(),“errorrrr”,Toast.LENGTH\u SHORT.show();
}
}) {
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map Params=新的HashMap();
字符串img=getStringImage(位图);
日志d(“qw”、“aasas”+img);
参数put(“图像”,img);
返回参数;
}
};
添加(请求);
}
@凌驾
公共void onClick(视图v){
如果(v==按钮选择){
showFileChooser();
}
如果(v==按钮加载){
上传图像();
}
如果(v==按钮视图){
viewImage();
}
}
私有void viewImage(){
//startActivity(新的意图(这个,ImageListView.class));
}
}

代码在我看来很好。似乎是许可问题。将这些行添加到PHP脚本的顶部

<?php
ini_set('display_errors', 1); // telling PHP to explicitly print all errors
error_reporting(E_ALL); // Show all notices, warnings and fatal errors

echo php文件中的base64字符串,并检查字符串是否存在,这样您就会确切地发现问题在于服务器端或android端的解码和保存图像无法发送base64,所以只需“echo$encoded_string;die()”您将很快发现问题,您还可以使用以下网站验证字符串是否有效,该网站将base64转换为图像我检查base64字符串是否正确,并且我在上面的网站中获得了准确的图像。这意味着所有工作都正常,除了将图像保存到服务器,所以请检查保存图像的文件夹的权限,并记录错误图像保存失败。我已授予文件夹的所有权限。它未显示任何错误。它仅显示“已成功连接”消息,其他内容不显示。服务器中仍未生成图像文件。我已授予文件夹的所有权限。