検索
ホームページウェブフロントエンドhtmlチュートリアルMultipartEntity_html/css_WEB-ITnose を使用して HTTPclient でファイルをアップロードする方法

jsp HTTPclient MultipartEntity multipart/form-data

jsp ページのアップロード ファイル コード:





httpclient 書き方がわかりません
インターネットでたくさん調べましたが、どれも私をコピーし、私もあなたのコピーをしました
これはすべてインターネット上でこのように書かれています。JSPコードは次のとおりです
< form action = "http://localhost/index.html" method = "post"
name = "param1" balue = "china"/ >

"param1", new StringBody("中国" , Charset.forName("UTF-8")));
entity.addPart("param2", new StringBody("value2", Charset.forName("UTF-8") ));
entity.addPart("param3") ", new FileBody( new File("C:\1.txt")));

HttpPost request = new HttpPost("http://localhost/index.html") ;
request.setEntity(entity);

理解できません。上記のパスはすべてファイルのアップロード用に選択されています。コード
entity.addPart("param3", new FileBody(new File("C: \1.txt")));ファイルパスはすべてハードコーディングされているようです。ファイルアップロード用の新しい File() はないようです。コードはサーバー側にあるのに、どうやってこのように書くことができますか?
ユーザーがアップロードしたローカル コードはローカル パスです。サーバー側には間違いなくこのアドレスがありません。

自分で検証せずに上記のコードを書いていることさえ知りません。
解決​​方法を教えてください。これは問題ですか?
サーバー側のインターフェイスには multipart/form-data データが必要です。どのように記述すればよいですか?
HTTPclient の機能は、JSP でブラウザー、つまり HTTP プロトコルのクライアントをシミュレートすることです。ローカルサーバー上のファイルを
ブラウザ
のようなターゲットサーバーにアップロードすることです。つまり、新しいファイル(「C:\1.txt」)の問題は解決できますよね? C:\1.txt はローカルサーバー上のファイルです。もちろんファイル名は自分で決めます

multipart/form-data ステートメントに関しては、HttpPost のパラメータ MultipartEntity によって自動的に追加されます

必要なのは Web ページです サーバーにアップロードするには、サーバーはローカル ファイルをアップロードする代わりに、HTTPclient を使用して別のサービス インターフェイスを呼び出してアップロードします

このインターフェイスでは、multipart/form-data のみを送信できると規定されており、ブラウザーはここでアップロードされたファイル情報をバックエンド経由で渡します。取得後、インターフェイスに移動して保存を実行します。インターフェイスは操作などの各データを保存します。

このウィンドウにはアップロード機能があり、バックグラウンドで httpclient を使用してデータを転送する必要があります。ファイル ストリーム。HTTPclient を使用したことがないため、HTTPclient を使用して転送する方法がわかりません

アップロード関数ウィンドウ

要求されたデータをバックグラウンドにアップロードします


これは、に渡されるデータですバックグラウンド、今 httpclient でマルチパート /form-data を取得したいのですが、その方法がわかりません

リクエスト URL: http://localhost:8080/proxy/api/images/attachments/json/0/67 /0/0/-1?Type=Image&CKEditor=textEditor&CKEditorFuncNum=1&langCode =zh-cn
リクエスト ヘッダー 注意: 暫定ヘッダーが表示されます。
Accept:text/html,application/xhtml+xml,application/xml;q=0.9, image/webp,*/*;q=0.8
コンテンツタイプ:multipart/form-data; 境界=----WebKitFormBoundarysw8ttG9a1gakIbQt
発信元:http://localhost:8080
リファラー:http://localhost:8080/ user/kouht/editonline
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/34.0.1847.116 Safari/537.36
クエリ文字列パラメータビュー ソースビュー URL エンコード
Type:Image
CKEditor :textEditor
CKEd itorFuncNum:1
langCode:zh-cn
Request Payload
------WebKitFormBoundarysw8ttG9a1gakIbQt
Content-Disposition: form-data;
ブラウザでアップロードされたファイルは、受信後、自分のサーバーにアップロードされます。 HTTPclient を使用する必要があるのは、他のサーバーに送信する場合だけです。
これはリレーです。混乱しないでください。

ブラウザでアップロードされたファイルは、受信後、他のサーバーに送信するときにのみ HTTPclient を使用する必要があります。混同しないでください。


別のサーバーに直接転送することはできませんか?

いいえ!
ブラウザがファイルのアップロードを完了すると jsp が動作し始めるため

そして HTTPclient はブラウザをシミュレートしてファイルモードでファイルをアップロードするだけです
アップロードされたファイルのデータを jsp で受信し、同時に上位サーバーに送信したい場合
まず、独自のファイル受信プログラムを作成する必要があります。もう 1 つは、ソケットを使用して上位サーバーに送信することです。知識が多すぎて、しばらくは実行できません。いいえ! ブラウザがファイルのアップロードを完了すると jsp が動作し始めるため

そして HTTPclient はブラウザをシミュレートしてファイルモードでファイルをアップロードするだけです
アップロードされたファイルのデータを jsp で受信し、同時に上位サーバーに送信したい場合
まず、独自のファイル受信プログラムを作成する必要があり、もう 1 つは、ソケットを使用して上位サーバーに送信することです
知識が多すぎて、すぐにはできないかもしれません


以前のコードを見たところ、それは可能であるようです。これは彼らが書いたものです

次のメソッドは、上記で説明したパスです リクエスト URL: http: //localhost : 8080/Proxy/API/Images/Attachments/JSON/0/67/0/0/-1? Type = Image & CKEditor = Texteditor & CKEDITORFUNCNUM = 1 & Langcode = zh-Cn
CTED VOID DOPOST (httpservletRequest) request, httpservletResponse 応答) {
String targerUrl =request.getRequestURI();
HttpProxy.request(request, response, targerUrl);//プロキシ リクエスト
}

/**
* プロキシリクエスト
*
* @param リクエスト
* - リクエスト
* @param レスポンス
* @param targetUrl - レスポンス
* @param targetUrl
* - ターゲットサーバーアドレス
* @param エンコード
* * - のエンコード形式ターゲットサーバー
* @return
* @throws IOException
*/
public static void request( HttpServletRequest request, HttpServletResponse response , String targetUrl) throws IOException {

// System.out.println("Enter Http proxy");

// ターゲット URL
if (null == targetUrl) {
throw new IOException("ターゲット サーバー アドレスがありません" );
}

// ターゲット サーバー アドレス
String url = null;

// ターゲット サーバー アドレスを取得し、ターゲット サーバーで中国語を再エンコードします
try {
url = ProxyUtils.rebuildURL2 (targetUrl, "utf -8");
} catch (Exception e) {
e.printStackTrace(); }

// リクエストパラメータ
Map );

// リクエストヘッダー情報
Mapheaders = new HashMap();

// クライアントリクエストメソッド

logger.info ("[プロキシリクエスト]メソッド: " + メソッド + ": " + url);

// リクエストヘッダー情報の列挙を取得します
Enumeration headersEnu = request.getHeaderNames(); )) {
// リクエストヘッダー名を取得します
String headerName = (String) headersEnu.nextElement();
headers.put(headerName.toLowerCase(), headerValue); logger. info("t[header] " + headerName + "=" + headerValue)
}

// 指定されたリクエストヘッダがある場合は、元のリクエストヘッダを上書きします
if (null != headerMap && headerMap.size () > 0) {
for (String key : headerMap.keySet()) {
headers.put(key.toLowerCase(), headerMap.get(key))
}
}
// パラメータキーを取得しますname
Enumeration enu = request.getParameterNames();
while (enu.hasMoreElements()) {
// パラメータ名のリストを取得します
String paramName = (String) enu.nextElement();リクエストパラメータとサードパーティサーバーに送信されるパラメータ
String paramValue = request.getParameter(paramName)
params.put(paramName, paramValue);
logger.info("t[parameter] " + paramName + "=" + paramValue);
}

// Ajax プロキシを取得します
AjaxProxy proxy = ProxyFactory.getProxyInstance(method, url, params, headers)

// // リクエストボディ
// String requestBody = readFileByLines(request.getInputStream(); );
/ /
// System.out.println("n[requestBody]" + requestBody)

// Ajax プロキシ応答を取得します
AjaxResponse resp = null;// 投稿リクエストであり、フォームアップロード (multipart/form-data) の場合は、入力ストリームを渡します
String contentType = headers.get("content-type");
boolean isUpload = null != contentType && contentType.toLowerCase( ).indexOf("multipart/form-data") >= 0;

// 1. 要求されたリソースが画像の場合、結果を返すための応答としてストリームを直接使用します
String accept = headers.get("accept") ;
boolean useStream4response = null != accept ? (accept.indexOf("image/") >= 0) : true;

// 戻り値として常にストリームを使用します
useStream4response = true ;

if ("post" .equalsIgnoreCase(method) && isUpload) {
useStream4response = false;
// 画像のアップロード後に XML 形式のデータが返されることを期待します
headers.put("accept", "application/json" );
resp = proxy.getAjaxResponse(request.getInputStream());
// } else if ( "put".equalsIgnoreCase(method) && params.size() > 0 )
// {
// // put リクエストはパラメータを持ち、入力ストリームを渡します
// resp = proxy.getAjaxResponse(request.getInputStream())
} else if (useStream4response) {
OutputStream out = response.getOutputStream();
resp = proxy. getAjaxResponse(out);
out.flush();
} else {
resp = proxy.getAjaxResponse();

// メソッドを取得します
httpMethod = resp.getMethod();応答がない場合は null
if (null == httpMethod ) {
logger.info("[プロキシ リクエストが失敗しました] http code: " + resp.getStatusCode() + ": " + url);
return;
// 応答ヘッダーを取得します
Header[] respHheaders = httpMethod.getAllHeaders();
for (int i = 0, len = respHheaders.length; i Header header = respHheaders[i]; if (!isOverrideCookie && "Set-Cookie".equalsIgnoreCase(header .getName())) {
continue;
}
if ("content-type".equalsIgnoreCase(header.getName())) {
if ("post ".equalsIgnoreCase(method) && isUpload) {
// アップロードされた場合、contentType は上書きされません
response.setCharacterEncoding("utf-8");
continue;
}
}
response.setHeader(header.getName( ), header.getValue());
logger.info("t [応答ヘッダー] " + header.getName() + "=" + header.getValue());

// 出力
if (useStream4response) ) {
logger.info("リクエストアドレス: " + url + " n-----戻り結果: [ストリーム]");
} else {
PrintWriter out = response.getWriter()
String result = resp; .getContent();
out.print(result);
}
return;

この赤いコードを使用してアップロードしてください

彼の書いたとおりに成功しましたか?

彼のアイデアはまったく異なります。彼はプロキシ サーバーを作成しました
サーバーを使用してクライアント リクエストを作成します

プロキシ サーバーを作成するときは、ユーザー データを覗いてはいけないことに注意してください。これは職業倫理に反します

はい、これは成功です。覗き見はありません。これは、ブラウザによって要求されたすべての情報を取得し、プロキシを使用して再度要求し、再度要求する前にデータをそのままにしておきます

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTML、CSS、およびJavaScriptの理解:初心者向けガイドHTML、CSS、およびJavaScriptの理解:初心者向けガイドApr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割:Webコンテンツの構造HTMLの役割:Webコンテンツの構造Apr 11, 2025 am 12:12 AM

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

HTMLとコード:用語を詳しく見るHTMLとコード:用語を詳しく見るApr 10, 2025 am 09:28 AM

htmlisaspecifictypeofcodefocuseduructuringwebcontent

HTML、CSS、およびJavaScript:Web開発者に不可欠なツールHTML、CSS、およびJavaScript:Web開発者に不可欠なツールApr 09, 2025 am 12:12 AM

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

HTML、CSS、およびJavaScriptの役割:コアの責任HTML、CSS、およびJavaScriptの役割:コアの責任Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTMLは初心者のために簡単に学ぶことができますか?HTMLは初心者のために簡単に学ぶことができますか?Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

HTMLでの開始タグの例は何ですか?HTMLでの開始タグの例は何ですか?Apr 06, 2025 am 12:04 AM

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

CSSのフレックスボックスレイアウトを使用して、メニューの点線のラインセグメンテーション効果のセンターアラインメントを実現する方法は?CSSのフレックスボックスレイアウトを使用して、メニューの点線のラインセグメンテーション効果のセンターアラインメントを実現する方法は?Apr 05, 2025 pm 01:24 PM

メニューで点線のラインセグメンテーション効果を設計する方法は?メニューを設計するときは、通常、皿の名前と価格の間に左右に合わせることは難しくありませんが、真ん中の点線またはポイントはどうですか...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン