0

Ich mache gerade eine Anwendung auf Android, wo ein Benutzer ein Bild mit einem Titel und einer Beschreibung in eine Datenbank und einen godaddy Server hochladen kann.Bilddaten werden an die Datenbank gesendet, aber die Datei wird nicht auf den Server hochgeladen

Wenn ich den Code testen, werden die Daten in die Datenbank eingefügt, das Bild wird jedoch nicht angezeigt oder an die angegebene Datei gesendet.

Ich habe eine Reihe von Argumenten, was das Problem sein könnte. Wenn ich etwas recherchiere, sehe ich Leute, die eine Multipart-Anfrage empfehlen, um das Problem zu lösen, aber ich sehe nicht, wie das das Problem lösen würde. Ich dachte, es könnte etwas mit Serverberechtigungen zu tun haben?

Hier ist mein Code:

UploadActivity.java

public class UploadActivity extends ActionBarActivity implements View.OnClickListener{ 

private Button bBrowse; 
private Button bUpload; 

private TextView tvFileInfo; 

// private ImageView imageView; 

private EditText enTitle; 
private EditText enDescription; 

private Bitmap bitmap; 

private int PICK_IMAGE_REQUEST = 1; 

private String UPLOAD_URL = "http://opuna.co.uk/Upload%20api/Upload.php"; 

private String KEY_IMAGE = "image"; 
private String KEY_TITLE = "Title"; 
private String KEY_DESC = "Description"; 


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

    bBrowse = (Button) findViewById(R.id.bBrowse); 
    bUpload = (Button) findViewById(R.id.bUpload); 

    enTitle = (EditText) findViewById(R.id.enTitle); 
    enDescription = (EditText) findViewById(R.id.enDescription); 

    tvFileInfo = (TextView) findViewById(R.id.tvFileInfo); 

    bBrowse.setOnClickListener(this); 
    bUpload.setOnClickListener(this); 

} 


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); 
    return encodedImage; 
} 

private void uploadImage() { 
    //Showing the progress dialog 
    final ProgressDialog loading = ProgressDialog.show(this, "Uploading...", "Please wait...", false, false); 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String s) { 
        //Disimissing the progress dialog 
        loading.dismiss(); 
        //Showing toast message of the response 
        Toast.makeText(UploadActivity.this, s, Toast.LENGTH_LONG).show(); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError volleyError) { 
        //Dismissing the progress dialog 
        loading.dismiss(); 

        //Showing toast 
        Toast.makeText(UploadActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show(); 
       } 
      }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      //Converting Bitmap to String 
      String image = getStringImage(bitmap); 

      //Getting Image Name 
      String Title = enTitle.getText().toString().trim(); 
      String Description = enDescription.getText().toString().trim(); 

      //Creating parameters 
      Map<String, String> params = new Hashtable<String, String>(); 

      //Adding parameters 
      params.put(KEY_IMAGE, image); 
      params.put(KEY_TITLE, Title); 
      params.put(KEY_DESC, Description); 


      //returning parameters 
      return params; 
     } 
    }; 

    //Creating a Request Queue 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 

    //Adding request to the queue 
    requestQueue.add(stringRequest); 
} 

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) { 
     Uri filePath = data.getData(); 
     try { 
      //Getting the Bitmap from Gallery 
      bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
      //Setting the Bitmap to ImageView 
      //imageView.setImageBitmap(bitmap); 
      tvFileInfo.setText("File Selected: " + filePath); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

@Override 
public void onClick(View v) { 

    if (v == bBrowse) { 
     showFileChooser(); 
    } 

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

Und hier die upload.php ist

<?php 

if($_SERVER['REQUEST_METHOD']=='POST'){ 
      $image = $_POST['image']; 
      $Title = $_POST['Title']; 
      $Description = $_POST['Description']; 


require_once('DatabaseConnect.php'); 
$sql ="SELECT id FROM Photos ORDER BY id ASC"; 
$res = mysqli_query($con,$sql); 
$id = 0; 
while($row = mysqli_fetch_array($res)){ 
$id = $row['id']; 
} 
$path = "uploads/$id.png"; //Possibly change to match file path of Subject ID 


$actualpath = "http://opuna.co.uk/$path"; 

$sql = "INSERT INTO Photos (image,Title,Description) VALUES ('$actualpath','$Title', '$Description')"; 
if(mysqli_query($con,$sql)){ 
file_put_contents($path,base64_decode($image)); 
echo "Successfully Uploaded"; 
} 
mysqli_close($con); 
}else{ 
echo "Error"; 
} 
?> 

Ich habe auch immer diesen Fehler:

E/Volley: [334] BasicNetwork.performRequest: Unerwarteter Antwortcode 500 für http://opuna.co.uk/Upload%20api/Upload.php

jede Hilfe wird geschätzt!

Antwort

1

Sie sollten Ihre Serverberechtigung überprüfen. Ich suche Ihr PHP-Skript, mehrteilige Anfrage vom Client ist must.To Mehrteilige mit Volly zu implementieren, folgen Sie den folgenden Link.

können Sie folgende Links verweisen:

Working POST Multipart Request with Volley and without HttpEntity

How to send a “multipart/form-data” POST in Android with Volley

Trouble Sending Multipart File with Boundary via Volley

+0

Warum ist es ein Muss? –

+0

Ihr PHP-Code akzeptiert keine Rohdaten, akzeptiert nur Formulardaten. – USKMobility