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!
Warum ist es ein Muss? –
Ihr PHP-Code akzeptiert keine Rohdaten, akzeptiert nur Formulardaten. – USKMobility