前提
初学者のため、説明足らずで申し訳ありません。
javaでServicenowというシステムにAPIをpostで送信し、csvファイルをアップロードするシステムを開発しています。
APIの実施手段として、httpURLconnectionで実装する必要があるのですが、バイナリデータの送信方法が分からなかったため、相談させてください。
実現したいこと
・httpURLconnectionでAPIをPOSTする。
・csvファイルをServicenowというシステムに送信する
発生している問題・エラーメッセージ
httpURLconnectionではsetRequestPropertyを用いてheaderなどを設定すると思うのですが、data-binaryの属性を設定するメソッドは存在しない認識です。そのため、OutputStreamWriterを用いてバイナリファイルのパスなどを書き込んだのですが、実行できませんでした。
該当のソースコード
java
1import java.net.HttpURLConnection; 2import java.net.URL; 3import java.io.OutputStreamWriter; 4 5HttpURLConnection conn = null; 6URL url = httpurl//ServicenowのURL; 7conn = (HttpURLConnection)url.openConnection(); 8 9//認証の情報の設定は省略いたします 10conn.setDoOutput(true); 11conn.setRequestMethod("POST"); 12conn.SetRequestProperty("Content-Type","text/csv"); 13conn.SetRequestProperty("Accept","text/xml"); 14 15//送信内容 16OutputStreamWriter request = new OutputStreamWriter(conn.putOutputStream(),"UTF-8"); 17request.write("--data-binary \"@ ローカルのファイルパス\""); 18request.close; 19 20//接続 21conn.connect(); 22 23//以上の実装の結果、--data-binary \"@ ローカルのファイルパス\"と書かれたファイルがアップロードされてしまう。 24 25 26
試したこと
上記のソースコードを実装したのですが、ファイルをアップロードできませんでした。
ほかのAPIはうまくいったので、接続などはできていることを確認しています。
補足情報(FW/ツールのバージョンなど)
javaは8を利用しており、環境の問題でapacheを利用したライブラリは利用できません。
また、servicenowの使用は以下のurlの通りで、そこに記載されているcurl文と同じ処理を実現したいです。
curl文
curl "https://instance.servicenow.com/api/now/attachment/file?table_name=incident&table_sys_id=d71f7935c0a8016700802b64c67c11c6&file_name=Issue_screenshot"
--request POST
--header "Accept:application/json"
--header "Content-Type: image/jpeg"
--user "username":"password"
--data-binary "@ location of the file on file system"
回答1件
あなたの回答
tips
プレビュー