HTTPclient使用MultipartEntity怎么上传文件_html/css_WEB-ITnose
jsp HTTPclient MultipartEntity multipart/form-data
jsp 页面上传文件代码:
httpclient 不知道怎么写,
网上查了一大堆都是你抄我我抄你的,
网上都是这么写的
jsp 代码是下面这样的
enctype="multipart/form-data">
后天代码都是这样写的
MultipartEntity entity = new MultipartEntity();
entity.addPart("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")));
文件路径都是写死的,文件上传貌似是没有这个new File()的吧!因为代码在服务器端,怎么可能会这么写呢?
用户上传自己本地的代码是本地的路径,服务器边这边肯定是没这个地址的,
我都不知道上面这些代码他们自己都不去验证就往上写
求高手们帮帮忙,这个问题怎么解决,
服务器端的接口要的就是multipart/form-data这个数据,我该怎么写
回复讨论(解决方案)
你先搞清楚 HTTPclient 是做什么用的
HTTPclient 的作用是在 jsp 中模拟一个浏览器,即 HTTP 协议的客户端(client)
你的后台代码是将你本地服务器上的文件 像浏览器那样上传到目标服务器
于是 new File("C:\\1.txt") 的问题就可以解决了吧?C:\\1.txt 是你本地服务器中的文件,当然文件名是你自己定的
至于 multipart/form-data 声明,那是由 HttpPost 的参数 MultipartEntity 自动加上的
我要的就是网页上传到服务器,服务器使用HTTPclient 调用另一个服务接口上传,并不是上传我本地文件
因为这个接口规定了只能传multipart/form-data,浏览器那边会把上传的文件信息通过这边后台获取后再转向接口那边去执行保存,接口那边存放操作各自数据等
我的页面是这样的,这个窗口有上传功能,进行提交,提交到后台,后台再使用httpclient转向另一个接口服务器,需要把这些数据传过去,接口那边要的是multipart/form-data 这个文件流,我现在不知道怎么使用httpclient传过去,因为我以前没用功HTTPclient
上传功能窗口
上传请求到后台的数据
这就是传给后台的数据,现在是想要httpclient获取multipart/form-data,不知道怎么做
Request URL:http://localhost:8080/proxy/api/images/attachments/json/0/67/0/0/-1?Type=Image&CKEditor=textEditor&CKEditorFuncNum=1&langCode=zh-cn
Request Headers CAUTION: Provisional headers are shown.
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarysw8ttG9a1gakIbQt
Origin:http://localhost:8080
Referer:http://localhost:8080/user/kouht/editonline
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Query String Parametersview sourceview URL encoded
Type:Image
CKEditor:textEditor
CKEditorFuncNum:1
langCode:zh-cn
Request Payload
------WebKitFormBoundarysw8ttG9a1gakIbQt
Content-Disposition: form-data; name="upload"; filename="menu.png"
Content-Type: image/png
------WebKitFormBoundarysw8ttG9a1gakIbQt--
你浏览器上传文件是上传到你自己的服务器,你接收后在传到其他服务器时,才需要用 HTTPclient
这是接力,不要搞混了!
你浏览器上传文件是上传到你自己的服务器,你接收后在传到其他服务器时,才需要用 HTTPclient
这是接力,不要搞混了!
不能直接传到另一个服务器吗
不能!
因为浏览器上传文件结束时,jsp 才开始工作
而 HTTPclient 只是模拟了浏览器,也是文件方式上传文件
如果你想在 jsp 中一边接收上传文件的数据,一边向上级服务器发送的话
一是要你自己写文件接收程序,二是要用 socket 向上级服务器发送
涉及的知识太多,你一时半会是搞不起来的
不能!
因为浏览器上传文件结束时,jsp 才开始工作
而 HTTPclient 只是模拟了浏览器,也是文件方式上传文件
如果你想在 jsp 中一边接收上传文件的数据,一边向上级服务器发送的话
一是要你自己写文件接收程序,二是要用 socket 向上级服务器发送
涉及的知识太多,你一时半会是搞不起来的
好像是可以的,我看了下他们以前的代码,是可以的,不需要那么麻烦,他们是这么写的
下面这个方法就是我上面说的那个路径 Request URL:http://localhost:8080/proxy/api/images/attachments/json/0/67/0/0/-1?Type=Image&CKEditor=textEditor&CKEditorFuncNum=1&langCode=zh-cn
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String targerUrl =request.getRequestURI();
HttpProxy.request(request, response, targerUrl);// 代理请求
}
/**
* 代理请求
*
* @param request
* - 请求
* @param response
* - 响应
* @param targetUrl
* - 目标服务器地址
* @param encoding
* - 目标服务器的编码格式
* @return
* @throws IOException
*/
public static void request(HttpServletRequest request, HttpServletResponse response, String targetUrl) throws IOException {
// System.out.println("进入Http代理");
// 目标url
if (null == targetUrl) {
throw new IOException("缺少目标服务器地址");
}
// 目标服务器地址
String url = null;
// 获取目标服务器地址,并对目标服务器中的中文进行重新编码
try {
url = ProxyUtils.rebuildURL2(targetUrl, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
// 请求参数
Map
// 请求头部信息
Map
// 客户端请求方式
String method = request.getMethod();
logger.info("[代理请求] method: " + method + ": " + url);
// 获取请求头部信息的枚举
Enumeration
while (headersEnu.hasMoreElements()) {
// 取得请求头部名称
String headerName = (String) headersEnu.nextElement();
String headerValue = request.getHeader(headerName);
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));
}
}
// 获取参数键值名称
Enumeration
while (enu.hasMoreElements()) {
// 取得参数名称列表
String paramName = (String) enu.nextElement();
// 处理本请求参数以及发送给第三方服务器的参数
String paramValue = request.getParameter(paramName);
params.put(paramName, paramValue);
logger.info("\t[参数] " + paramName + "=" + paramValue);
}
// 取得ajax代理
AjaxProxy proxy = ProxyFactory.getProxyInstance(method, url, params, headers);
// // 请求body
// String requestBody = readFileByLines(request.getInputStream());
//
// System.out.println("\n[requestBody]" + requestBody);
// 获取ajax代理响应
AjaxResponse resp = null;
// 若是post请求,且属于表单上传时(multipart/form-data),传递input流
String contentType = headers.get("content-type");
boolean isUpload = null != contentType && contentType.toLowerCase().indexOf("multipart/form-data") >= 0;
// 1,当请求的资源是图片时,直接使用流作为response返回结果
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请求, 且具有参数, 传递input流
// resp = proxy.getAjaxResponse(request.getInputStream());
} else if (useStream4response) {
OutputStream out = response.getOutputStream();
resp = proxy.getAjaxResponse(out);
out.flush();
} else {
resp = proxy.getAjaxResponse();
}
// 取得方法
HttpMessage httpMethod = resp.getMethod();
// 无响应时httpMethod为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[response header] " + header.getName() + "=" + header.getValue());
}
// 输出
if (useStream4response) {
logger.info("请求地址: " + url + "\n-----返回结果: [Stream]");
} else {
PrintWriter out = response.getWriter();
String result = resp.getContent();
out.print(result);
}
return;
}
用这个红色的代码给上传上去了
你按他写的成功了吗?
他的思路是完全不同的,他是写了一个代理服务器
用你的服务器中站客户端请求
需要注意的是,写代理服务器时,不要窥视用户数据。这是有违职业道德的
对,这个就成功了,没有窥视,他这就是相当于把浏览器请求的信息全部拿到再去用代理请求一次,把数据原封不动的再去请求

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









WeChat을 열고 내 설정을 선택하고 일반을 선택한 다음 저장 공간을 선택하고 저장 공간에서 관리를 선택한 다음 파일을 복원하려는 대화를 선택하고 느낌표 아이콘을 선택합니다. 튜토리얼 적용 모델: iPhone13 시스템: iOS15.3 버전: WeChat 8.0.24 분석 1 먼저 WeChat을 열고 내 페이지에서 설정 옵션을 클릭합니다. 2 그런 다음 설정 페이지에서 일반 옵션을 찾아 클릭합니다. 3일반 페이지에서 저장 공간을 클릭하세요. 4 그런 다음 저장 공간 페이지에서 관리를 클릭하세요. 5마지막으로 파일을 복구하려는 대화를 선택하고 오른쪽의 느낌표 아이콘을 클릭하세요. 보충: WeChat 파일은 일반적으로 며칠 내에 만료됩니다. WeChat에서 받은 파일을 클릭하지 않은 경우 WeChat 파일을 본 경우 WeChat 시스템에서 해당 파일을 지웁니다.

Windows에서 사진 앱은 사진과 비디오를 보고 관리하는 편리한 방법입니다. 이 애플리케이션을 통해 사용자는 추가 소프트웨어를 설치하지 않고도 멀티미디어 파일에 쉽게 액세스할 수 있습니다. 그러나 때때로 사용자는 사진 앱을 사용할 때 "지원되지 않는 형식이므로 이 파일을 열 수 없습니다."라는 오류 메시지가 표시되거나 사진이나 비디오를 열려고 할 때 파일이 손상되는 등 몇 가지 문제가 발생할 수 있습니다. 이러한 상황은 사용자에게 혼란스럽고 불편할 수 있으므로 문제를 해결하려면 몇 가지 조사와 수정이 필요합니다. 사용자가 사진 앱에서 사진이나 비디오를 열려고 하면 다음 오류가 표시됩니다. 죄송합니다. 해당 형식이 현재 지원되지 않거나 파일이 아니기 때문에 포토에서 이 파일을 열 수 없습니다.

이 문서에서는 Windows 시스템에서 파일이나 폴더를 삭제할 때 "삭제 준비 완료" 메시지가 나타나는 문제를 해결하는 방법을 소개합니다. 이 프롬프트는 시스템이 파일 권한 확인, 파일이 다른 프로그램에 의해 사용되고 있는지 확인, 삭제할 항목의 크기 계산 등과 같은 일부 백그라운드 작업을 수행하고 있음을 의미합니다. 너무 오래 기다리지 않고 파일을 성공적으로 삭제할 수 있도록 몇 가지 해결 방법을 제공하겠습니다. Windows에서 파일을 삭제하는 데 시간이 오래 걸리는 이유는 무엇입니까? Windows에서 파일 삭제를 준비하는 데 걸리는 시간은 파일 크기, 저장 장치 속도, 백그라운드 프로세스 등 다양한 요인의 영향을 받습니다. "삭제 준비 중" 프롬프트가 길거나 멈춰 있으면 시스템 리소스 부족, 디스크 오류 또는 파일 시스템 문제를 나타낼 수 있습니다. 존재하다

Tmp 형식 파일은 일반적으로 실행 중에 컴퓨터 시스템이나 프로그램에 의해 생성되는 임시 파일 형식입니다. 이러한 파일의 목적은 프로그램이 제대로 실행되거나 성능을 향상시키는 데 도움이 되는 임시 데이터를 저장하는 것입니다. 프로그램 실행이 완료되거나 컴퓨터가 다시 시작되면 이러한 tmp 파일은 더 이상 필요하지 않은 경우가 많습니다. 따라서 Tmp 형식 파일의 경우 기본적으로 삭제가 가능합니다. 또한 이러한 tmp 파일을 삭제하면 하드 디스크 공간을 확보하고 컴퓨터의 정상적인 작동을 보장할 수 있습니다. 그러나 Tmp 형식 파일을 삭제하기 전에 다음을 수행해야 합니다.

Quark Netdisk와 Baidu Netdisk는 현재 파일 저장에 가장 일반적으로 사용되는 Netdisk 소프트웨어입니다. Quark Netdisk의 파일을 Baidu Netdisk에 저장하려면 어떻게 해야 합니까? 이번 호에서는 편집자가 Quark Network Disk 컴퓨터에서 Baidu Network Disk로 파일을 전송하는 방법에 대한 튜토리얼 단계를 정리했습니다. Quark 네트워크 디스크 파일을 Baidu 네트워크 디스크에 저장하는 방법은 무엇입니까? Quark Network Disk에서 Baidu Network Disk로 파일을 전송하려면 먼저 Quark Network Disk에서 필요한 파일을 다운로드한 다음 Baidu Network Disk 클라이언트에서 대상 폴더를 선택하고 열어야 합니다. 그런 다음 Quark Cloud Disk에서 다운로드한 파일을 Baidu Cloud Disk 클라이언트가 연 폴더에 끌어서 놓거나 업로드 기능을 사용하여 Baidu Cloud Disk에 파일을 추가합니다. 업로드가 완료된 후 파일이 Baidu Cloud Disk에 성공적으로 전송되었는지 확인하세요. 그게 다야

컴퓨터에서 폴더를 삭제하거나 압축을 풀 때 "오류 0x80004005: 지정되지 않은 오류"라는 프롬프트 대화 상자가 나타나는 경우가 있습니다. 이러한 상황이 발생하면 어떻게 해야 합니까? 실제로 오류 코드 0x80004005가 나타나는 데에는 여러 가지 이유가 있지만 대부분은 바이러스로 인해 발생합니다. 문제를 해결하기 위해 dll을 다시 등록할 수 있습니다. 아래에서는 편집기에서 0x80004005 오류 코드를 처리한 경험을 설명합니다. . 일부 사용자는 컴퓨터를 사용할 때 오류 코드 0X80004005가 표시됩니다. 0x80004005 오류는 주로 컴퓨터가 특정 동적 링크 라이브러리 파일을 올바르게 등록하지 않거나 컴퓨터와 인터넷 간의 HTTPS 연결을 허용하지 않는 방화벽으로 인해 발생합니다. 그렇다면 어떨까요?

gho 파일은 일반적으로 전체 하드 디스크나 파티션 데이터를 파일로 백업하는 데 사용되는 GhostImage 이미지 파일입니다. 일부 특정 경우에는 하드 드라이브나 파티션을 이전 상태로 복원하기 위해 이 gho 파일을 하드 드라이브에 다시 설치해야 합니다. gho 파일을 설치하는 방법은 다음과 같습니다. 먼저, 설치하기 전에 다음 도구와 자료를 준비해야 합니다. Entity gho 파일: 일반적으로 접미사가 .gho이고 백업이 포함된 완전한 gho 파일이 있는지 확인합니다.

최근 많은 네티즌들이 편집자에게 hiberfil.sys 파일이 무엇인지 문의했습니다. hiberfil.sys가 C 드라이브 공간을 많이 차지하고 삭제될 수 있나요? 편집자는 hiberfil.sys 파일을 삭제할 수 있음을 알려줄 수 있습니다. 아래에서 자세한 내용을 살펴보겠습니다. hiberfil.sys는 Windows 시스템의 숨겨진 파일이자 시스템 최대 절전 모드 파일입니다. 일반적으로 C 드라이브의 루트 디렉터리에 저장되며 크기는 시스템에 설치된 메모리 크기와 동일합니다. 이 파일은 컴퓨터가 최대 절전 모드일 때 사용되며, 복구 시 빠르게 이전 상태로 복원할 수 있도록 현재 시스템의 메모리 데이터를 담고 있습니다. 크기가 메모리 용량과 동일하므로 하드 드라이브 공간을 더 많이 차지할 수 있습니다. 동면
