[追記]
サーバーのエラーメッセージは無しです。
{"status":500,"message":"file not uploaded."}
[/追記]
[追記]
できないというのは、ファイルがサーバーにアップロードされないと言う意味です。
サーバーにアップロードされないのはどうやって気がついたかと言うと
ステータスが500で帰ってきたからです。
[/追記]
サーバーをPHPで書いてそのサーバーにファイルをポストするJAVAプログラムを下記を参考(ほぼコピペして)に書いたの
http://androidnote.logdown.com/posts/152809-http-messenger
うまくファイルをPOSTできません。
東方プログラミング初心者でJavaはそもそも苦手で全く詳しくありません。
誰か助けていただけないでしょうか...?
ちなみにURLとファイル名はしっかり入力しました。
よろしくお願いいたします。
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args){
sendData("URL","ファイル名");
}
public static void sendData(String api, String filename) {
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
try {
// サーバへの接続開始
URL url = new URL(api);
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
// キャッシュを使用しない
connection.setUseCaches(false);
connection.setRequestMethod("POST");
// HTTP/1.1 でサポートされた持続接続機能が使用できることを宣言する
connection.setRequestProperty("Connection", "Keep-Alive");
// マルチパートデータとして複数のデータを送ることを宣言する
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
StringBuilder builder = new StringBuilder();
builder.append(twoHyphens + boundary + lineEnd);
builder.append("Content-Disposition: form-data; name=\"id\"" + lineEnd);
builder.append(lineEnd);
builder.append(lineEnd);
builder.append(twoHyphens + boundary + lineEnd);
builder.append("Content-Disposition: form-data; name=\"password\"" + lineEnd);
builder.append(lineEnd);
builder.append(lineEnd);
builder.append(twoHyphens + boundary + lineEnd);
builder.append("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + filename + "\"" + lineEnd);
builder.append(lineEnd);
File file = new File(filename);
FileInputStream fileInputStream = new FileInputStream(file);
StringBuilder lastbuilder = new StringBuilder();
lastbuilder.append(lineEnd + twoHyphens + boundary + twoHyphens + lineEnd);
// 内部バッファ処理を行わずに HTTP 要求本体のストリーミングを有効にする
connection.setChunkedStreamingMode(0);
// setFixedLengthStreamingMode をつかう場合
// Content-length を算出する
// int contentLength = (int) (builder.toString().getBytes().length
// + lastbuilder.toString().getBytes().length
// + file.length());
// connection.setFixedLengthStreamingMode(contentLength);
outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(builder.toString());
// ファイルを一定サイズ毎読み書きする
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
outputStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
outputStream.writeBytes(lastbuilder.toString());
String result = "";
// 成功ならレスポンスボディをそのまま表示する
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line = null;
while ((line = br.readLine()) != null) {
result += line + "\n";
}
} else {
result = "Server error is occured";
}
try {
fileInputStream.close();
outputStream.flush();
outputStream.close();
connection.disconnect();
} catch (Exception e) {
// Android 2.2 以下だと flush() あたりで java.io.IOException: Stream is
// closed が発生するが、ファイルは無事に届いているはず。
// Default buffer size used in BufferedReader constructor. It
// would be better to be explicit if an 8k-char buffer is
// required. が関係しているような気がする。
e.printStackTrace();
}
System.out.println(result);
} catch (FileNotFoundException e) {
} catch (Exception ex) {
}
}
}
<?php
require_once "twitter.php";
$domain = empty($_SERVER["HTTPS"]) ? "http://" : "https://";
$domain .= $_SERVER["HTTP_HOST"];
$postName = "upload";
$response = array();
if (is_uploaded_file($_FILES[$postName]['tmp_name'])) {
if (move_uploaded_file($_FILES[$postName]['tmp_name'],"./upload/".$_FILES[$postName]['name'])) {
$response['status'] = 200;
$response['message'] = "uploaded";
$response['twitter'] = tweetUpfile( $domain . "/upload/" . $_FILES[$postName]['name']);
} else {
$response['status'] = 500;
$response['message'] = "error while saving.";
}
} else {
$response['status'] = 500;
$response['message'] = "file not uploaded.";
}
header('Content-Type: application/json');
echo json_encode($response);
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
サーバー側の内部エラーですね、Android側はとりあえず放置してサーバー側でデバッグしましょう。
・サーバー側のログを質問に追記してください。
・サーバー側からのレスポンスを質問に追記してください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.97%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
yona
2017/02/13 21:36
なにができないのでしょう。エラーがあるんですか?無反応なんですか?具体的にかかないとわかりません。