@ms01

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

JAVAプログラムから外部APIを起動しファイルのアップロードを同時に行いたい。

解決したいこと

JAVAのコーディングについてご教授願います。

サーブレットから外部APIを起動と同時にファイルのアップロードをする必要があります。
外部APIにアクセスし、ログイン処理を行い、そのままのセッションでファイルのアップロードと同時に加工処理を行います。
アップロードするファイルは、HTML画面上からファイルを選択はせず、決められた位置とファイル名で存在し、JAVAサーブレット上で全て完結するものとしています。

発生している問題・エラー

HTML画面上からファイルを選択しMALTIPARTで受け取って処理をする方法は多くのサイトで見かけるのですが、サーブレット上のみで全て完結する方法が分からなく非常に困っています。

該当するソースコード

非常につたない簡素化したコードでありますが以下に載せます。

public void upload(){

try {

    // セッション(cookie)保持用
    String cookie = "";

    // 外部APIのURL
    URL url = new URL("http://uploadsever/uploadAPI/Rests/APIExecute.aspx");

    // 外部APIを起動しログイン処理を行う
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Connection", "Keep-Alive");
    conn.connect();
    PrintWriter out = new PrintWriter(conn.getOutputStream());
    out.write("command=login");
    out.write("userid=user01");
    out.write("password=user01");
    out.flush();
    out.close();
    cookie = conn.getHeaderField("Set-Cookie"); //cookie情報を保持(後から使用するため)


    // 外部APIを起動しファイル取込と加工処理を行う
    HttpURLConnection conn2 = (HttpURLConnection)url.openConnection();
    conn2.setDoInput(true);
    conn2.setDoOutput(true);
    conn2.setRequestMethod("POST");
    conn2.setRequestProperty("Connection", "Keep-Alive");
    conn2.setRequestProperty("Cookie", cookie); //ログイン処理で保持していたcookie情報をセット(同一セッションで処理する必要があるため)
    conn2.connect();
    PrintWriter out = new PrintWriter(conn2.getOutputStream());
    out.write("command=upload");
    out.write("type=csv");
    out.write("encording=utf-8");

    //アップロードしたいファイルのパス
    String filePath = "c:\upload\upload.csv";
    //アップロード方法↓↓↓↓↓↓


    //アップロード方法↑↑↑↑↑↑↑

    out.flush();
    out.close();

    //処理結果確認
    InputStream in = conn2.getInputStream();
    DocumentBuilderFactory factory = DocumentBuilderFactory.nexInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(in);
    in.close();
    NodeList nodes = doc.getElementsByTagNmae("errcode");
    String  errCode = nodes.item(0).getTextContent();
    system.out.println(errCode);

} catch (Exception e) {
    system.out.println(e);
}

return;

}

自分で試したこと

MultiPartオブジェクトに指定ファイルを読み込ませようとしたり、いろいろ試してはみましたがうまくいきません。
非常に困っております。
初めての投稿でつたない文章だとは思いますが、どうぞよろしくお願いいたします。

0 likes

2Answer

ご丁寧な返信有難うございます。

上記サンプルコードはあくまでVBでこう書くと実現する例であって、呼び出し元からtype, encoding, filePathが引数として渡されるため設定済とみなしていただければ良いかと思います。
JAVAではクエリの設定は容易なのですが、VBサンプルコードで言うところの

Me.WebClient.UploadFile(urlWithParam, filePath)

この部分をJAVAではどうコーディングすべきかを迷っております。

度々考えていただき本当に有難うございます。

0Like

ms01様
具体的にどのような調整を行ったことで
正常に処理出来るようになったのかとても興味深いです。

0Like

Your answer might help someone💌