Loopj を使用して、WordPress サイトと WP REST API v1 および/または v2 (同じ結果) にファイルをアップロードしています。
認証はうまくいき、ヘッダーはうまくいき、ファイルは「アップロード」されますが、WordPress バックエンドで確認すると... 画像またはファイルが壊れています。
Android の部分は次のようになります。
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();
}
しかし、画像は...私のWordPressバックエンドでは次のようになります。
なぜこれが起こるのか誰にも分かりますか?私のファイルとファイルパスは完璧です。画像を取得して、アップロードする前に携帯電話に表示できます。
編集:このcURLは完璧に機能します
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
主な違いは --data-binary @ にありますが、Java でそれを行う方法がわかりません。