サービス モジュールを使用して、Android デバイスから drupal Web サイトに画像ファイルをアップロードしようとしています。
私は正常にログインできます:
HttpParams connectionParameters = new BasicHttpParams();
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(connectionParameters, timeoutConnection);
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(connectionParameters, timeoutSocket);
httpClient = new DefaultHttpClient(connectionParameters);
HttpPost httpPost = new HttpPost(serverUrl+"user/login");
JSONObject json = new JSONObject();
try{
json.put("password", editText_Password.getText().toString());
json.put("username", editText_UserName.getText().toString());
StringEntity se = new StringEntity(json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(se);
//Execute HTTP post request
HttpResponse response = httpClient.execute(httpPost);
int status_code = response.getStatusLine().getStatusCode();
...
...
}
catch(Exception ex)
{
}
応答オブジェクトを介して、セッション名 session id 、ユーザー ID およびその他の多くの情報を取得できます。
ログイン後、HttpGet オブジェクトを介して自分でセッション情報を設定しませんが、同じ DefaultHttpClient を使用すると、次のコードを使用して魔法のようにノードを取得できます。
HttpGet httpPost2 = new HttpGet(serverUrl+"node/537.json");
HttpResponse response2 = httpClient.execute(httpPost2);
これは、httpClientオブジェクトがセッション情報を自動的に保存したと思いました。最初にログインしないか、新しい HttpClient オブジェクトを使用してノードを取得しようとすると、401 エラーが発生するためです。
ただし、ログイン後に次のように画像ファイルをアップロードしようとすると:
httpPost = new HttpPost(serverUrl+"file/");
json = new JSONObject();
JSONObject fileObject = new JSONObject();
fileObject.put("file", photodata); //photodata is a byte[] that is set before this point
fileObject.put("filename", "myfirstfile");
fileObject.put("filepath", "sites/default/files/myfirstimage.jpg");
json.put("file", fileObject);
se = new StringEntity(json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(se);
//Execute HTTP post request
response = httpClient.execute(httpPost);
status_code = response.getStatusLine().getStatusCode();
ログインして同じ HttpClient オブジェクトを使用しているにもかかわらず、401 エラーが発生します。
私も追加しようとしました:
httpPost.setHeader("Cookie", SessionName+"="+sessionID);
これでも 401 エラーが発生します。
file.create メソッドを使用しようとしているため、正しい URL を使用しているかどうかもわかりませんが、URL を「myip:myport/rest/file/create」と記述すると、間違ったアドレスが返されます。私の目的は、イメージをユーザー ノードにアップロードすることなので、ファイルを正常に追加した後、node.create を使用しますよね?
誰かが私がこれを乗り越えるのを手伝ってくれることを願っています.