ホームページ >ウェブフロントエンド >htmlチュートリアル >MultipartEntity_html/css_WEB-ITnose を使用して HTTPclient でファイルをアップロードする方法
jsp HTTPclient MultipartEntity multipart/form-data
jsp ページのアップロード ファイル コード:
このウィンドウにはアップロード機能があり、バックグラウンドで 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 を使用する必要があるのは、他のサーバーに送信する場合だけです。
これはリレーです。混乱しないでください。
いいえ!
ブラウザがファイルのアップロードを完了すると 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
// リクエストヘッダー情報
Map
// クライアントリクエストメソッド
logger.info ("[プロキシリクエスト]メソッド: " + メソッド + ": " + url);
// リクエストヘッダー情報の列挙を取得します
Enumeration
// リクエストヘッダー名を取得します
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
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
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;
この赤いコードを使用してアップロードしてください
彼の書いたとおりに成功しましたか?
彼のアイデアはまったく異なります。彼はプロキシ サーバーを作成しました
サーバーを使用してクライアント リクエストを作成します
プロキシ サーバーを作成するときは、ユーザー データを覗いてはいけないことに注意してください。これは職業倫理に反します