質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Q&A

0回答

1005閲覧

http通信にてファイルがアップロードされない Java

juria_1208

総合スコア1

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

0グッド

0クリップ

投稿2020/12/15 06:34

java言語でhttp通信を利用したファイルアップロードアプリを作成しています。

下記のコードで試してみました。

HTTP_OKで返ってきており、得にエラーも出ていませんが
実際にはアップロード先にファイルはアップされていません。

検索の仕方が悪いのか参考になりそうなwebページも見つかりませんでした。

エラーがでないにも関わらず、実際にはアップデートされない原因はなんでしょうか。

よろしくお願いします。

urlには実際にはIPアドレスを入れています。
ダウンロードアプリも別で作成していますが、ダウンロードの方は同じIPで正常にダウンロードできることを確認しております。

java

1public static void main(String[] args) throws IOException { 2 3 String filename = "D:\test\upload\uptest.zip"; 4 String url = "http://xxx.xxx.xxx.xxx/upload"; 5 int res = Sample.Send(filename, url, "POST"); 6 if (res == HttpURLConnection.HTTP_OK) { 7 System.err.println("Success!"); 8 } else { 9 System.err.printf("Failed %d\n", res); 10 } 11 12 }

java

1 public static int Send(String filename, String url, String method) throws IOException { 2 try (FileInputStream file = new FileInputStream(filename)) { 3 HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); 4 final String boundary = UUID.randomUUID().toString(); 5 con.setDoOutput(true); 6 con.setRequestMethod(method); 7 con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); 8 try (OutputStream out = con.getOutputStream()) { 9 out.write(("--" + boundary + EOL + 10 "Content-Disposition: form-data; name=\"file\"; " + 11 "filename=\"" + filename + "\"" + EOL + 12 "Content-Type: application/octet-stream" + EOL + EOL) 13 .getBytes(StandardCharsets.UTF_8) 14 ); 15 byte[] buffer = new byte[4096]; 16 int size = -1; 17 while (-1 != (size = file.read(buffer))) { 18 out.write(buffer, 0, size); 19 } 20 out.write((EOL + "--" + boundary + "--" + EOL).getBytes(StandardCharsets.UTF_8)); 21 out.flush(); 22 System.err.println(con.getResponseMessage()); 23 return con.getResponseCode(); 24 } finally { 25 con.disconnect(); 26 } 27 } 28 } 29

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/12/15 07:19

アップロードしたファイルについて、サーバー側の処理はどうなっているのでしょうか。POSTメソッドでの適切なHTTPリクエストだとしても、サーバー側では受信したデータをファイルに保存する処理が必要になるはずです。
juria_1208

2020/12/15 07:55

ありがとうございます。 ダウンロードアプリ作成時にはapacheをインストールするだけでよかったので、アップロードの際にサーバ側で何か処理がいると思っていませんでした。 ご回答いただいてから、「apache post 受け取り」等で検索してみましたが理解できるサイトが見当たりません。 どのような検索ワードがよいかご教示いただけないでしょうか。
dodox86

2020/12/15 08:21

HTTPリクエストを処理するサーバー側のプログラムが必要、ということです。その形態はCGIであったり、Javaサーブレットであったり、PHP、その他、サーバーサイドのプログラミングです。「HTTP アップロード 仕組み」などでまずは概要を学んでみてください。
dodox86

2020/12/15 08:26

ファイルのダウンロードはapacheからのHTTPレスポンスの内、ファイルに相当する部分のデータをクライアント側がファイルに保存するだけのため、サーバー側に特別なプログラムは必要無いだけです。ログインや認証、データベースアクセスなど複雑な処理がある場合は、やはりサーバー側プログラムが必要になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問