Ich verwende Loopj, um Dateien auf meine WordPress-Site und WP REST API v1 und/oder v2 hochzuladen (gleiche Ergebnisse).
Die Authentifizierungen funktionieren hervorragend, Header funktionieren hervorragend, Dateien werden “hochgeladen”, aber wenn ich sie in meinem WordPress-Backend überprüfe … ist das Bild oder die Datei beschädigt.
Der Android-Teil geht so:
File myFile = new File(finalpath);
String name = Utils.getLastBitFromUrl(finalpath);
String extension = Utils.getFileExtention(finalpath);
client.setBasicAuth("myusername", "mypassword", new AuthScope("mywebsite.com", 80, AuthScope.ANY_REALM));
client.addHeader("Content-Disposition", "filename=" + name);
client.addHeader("Content-Type", "image/" + extension);
try {
params.put("data", myFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// or: http://mywebsite.com/wp-json/wp/v2/media for v2
client.post("http://mywebsite.com/wp-json/media", params, new AsyncHttpResponseHandler() {
int count = 0;
@Override
public void onStart() {
prgDialog = new ProgressDialog(MainActivity.this);
prgDialog.setMessage("Uploading Image...");
prgDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
prgDialog.setMax(100);
prgDialog.show();
}
@Override
public void onProgress(long bytesWritten, long totalSize) {
if(count < 1){
count++;
Log.d("size", "" + Utils.formatFileSize(totalSize));
}
long progressPercentage = (long)100*bytesWritten/totalSize;
if(progressPercentage <= 100) {
prgDialog.setProgress((int) progressPercentage);
}
}
@Override
public void onSuccess(int statuscode, Header[] headers, byte[] response) {
try {
prgDialog.dismiss();
JSONObject obj = new JSONObject(Utils.decodeUTF8(response));
Log.e("success!", Utils.decodeUTF8(response));
} catch (JSONException e) {
e.printStackTrace();
}
Aber das Bild… sieht in meinem WordPress-Backend so aus:
Hat jemand eine Ahnung warum das passiert? Meine Datei und mein Dateipfad sind perfekt. Ich kann das Bild abrufen und auf meinem Telefon anzeigen, bevor ich es hochlade.
EDIT: Diese cURL funktioniert perfekt
curl -i -X POST -H "Content-Disposition:filename=test.png" --data-binary @"/home/my-name/Downloads/example.png" -d title="test" -u username:password -H "Expect:" http://my.website.com/wp-json/wp/v2/media
Der Hauptunterschied ist über –data-binary @, aber ich weiß nicht, wie das über Java geht.
Hallo, ich stehe hier vor dem gleichen Problem…. hast du das gelöst?
– Sangharscha
24. Januar 2016 um 10:58 Uhr
Noch nicht 🙁 Ich verfolge das Github-Projekt, um zu sehen, ob jemand das löst.
– Mariano Zorilla
24. Januar 2016 um 17:32 Uhr
Hey, wenn du das Problem gelöst hast, poste bitte die Lösung…. 🙂
– Sangharscha
30. Januar 2016 um 14:38 Uhr
Bitte überprüfen Sie, ob die Datei ladbar und vom Browser beschädigt ist, möglicherweise ist das Bild nicht richtig angehängt. Versuchen Sie auch ein anderes Bild mit einem anderen Format – ich hatte ein ähnliches Problem, als ich Bilder in Photoshop erneut speichern musste, um zu verhindern, dass WordPress denkt, das Bild sei kaputt, z. B. wenn das Bild falsch in ein anderes Format konvertiert wurde.
– SergeDirect
23. August 2016 um 22:45 Uhr