2015年2月21日土曜日

Androidからベーシック認証がかかっているサイトへファイルをアップする方法

SYSTEM_KDです。

AndroidからWEBサイトに対して、ファイルをアップしようとした際に、普通にファイルをアップする処理は、ググれば見つかったのですが、ベーシック認証(基本認証)がかかっているサイトに対してファイルをアップする方法が見つからなかったので、メモをかねてまとめ。

 

Androidアプリからベーシック認証があるサイトへのファイルアップ

では、早速ソース。

    DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("POST先のURL");

// 基本認証
credentials = new UsernamePasswordCredentials(
"ベーシック認証ID",
"ベーシック認証パスワード"
);

final int DEFAULT_PORT = 80;
scope = new AuthScope("アップ先のドメイン", DEFAULT_PORT);
client.getCredentialsProvider().setCredentials(scope, credentials);

MultipartEntityBuilder entity = MultipartEntityBuilder.create();
entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

// POST 値設定
entity.addTextBody("post項目のname", "post項目のvalue");

// アップするファイルを設定
String fileName = "ファイル名";
File upFile = new File("ファイルパス");
InputStream is = new FileInputStream(upFile);

byte[] filebyte;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

final int READ_BYTE = 5120;
byte[] buffer = new byte[READ_BYTE];

int n = is.read(buffer);
while(n >= 0) {
byteArrayOutputStream.write(buffer, 0, n);
n = is.read(buffer);
}
is.close();

filebyte = byteArrayOutputStream.toByteArray();

ByteArrayBody byteArrayBody = new ByteArrayBody(
filebyte ,
ContentType.create("application/x-gzip"), // MIME タイプ設定
fileName);

entity.addPart("Post(ファイル)項目のname", byteArrayBody);

// post値生成
post.setEntity(entity.build());


// Cookieの設定が必要な場合 --ここから--
BasicClientCookie basicCookie
= new BasicClientCookie(cookie.getKey(), cookie.getValue());

// ドメイン、パス設定
basicCookie.setDomain("ドメイン");
basicCookie.setPath("パス");

client.getCookieStore().addCookie(basicCookie);
// Cookieの設定が必要な場合 --ここまで--

// ファイルを含めてPOST
HttpResponse response = client.execute(post);

// レスポンスコード取得
int status = response.getStatusLine().getStatusCode();
if(status == HttpStatus.SC_OK) {
// 成功
else {
// 失敗
}

ざっくり説明


5行目~12行目:
ベーシック認証のIDとパスを設定。

14行目~15行目:
POST値を設定するためのEntity作成。

18行目:
POST値を設定、必要であれば増やします。

21行目~46行目:
アップするファイルを設定している部分。
39行目までで、byteで読み込み、41行目でアップする値を生成。
※今回は「tar.gz」をアップするMIMEタイプを設定。

49行目:
Entityからpostを生成。

52行目~61行目:
Cookieの設定が必要な場合は、ここにあるような形で設定。

64行目~:
サーバへpostを行って、結果を確認。

※以下のjarを利用してます
・httpcore-4.3.3.jar
・httpmime-4.3.6.jar


まとめ


ということで、Androidから基本認証がかかっている状態のサイトに対して、ファイルをアップする方法でした。
まぁ、あんまり必要になることはない気がしますが、これでできるかと思います。

0 件のコメント:

コメントを投稿