itmale 2019-12-16
背景:前端上传图片,后台接收到,转发给第三方系统或文件系统。
jar包
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5</version>
</dependency>简易代码:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("file")
public class FileController {
@RequestMapping(value = "upload")
@ResponseBody
public void upload(HttpServletRequest request) {
try {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile coverFile = multipartRequest.getFile("file");
String url = "";
Map<String,String> textMap = new HashMap<>();
HttpUtil.httpClient(url, textMap, coverFile.getName(), coverFile.getInputStream());
} catch (Exception e) {
System.out.println(e);
}
}
}import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class HttpUtil {
public static String httpClient(String url,Map<String,String> textMap,
String fileName,InputStream inputStream) throws ClientProtocolException, IOException{
HttpClient context = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
//MultipartEntityBuilder builder = MultipartEntityBuilder.create();
for (Entry<String,String> param : textMap.entrySet()) {
builder.addTextBody(param.getKey(),param.getValue(),ContentType.TEXT_PLAIN);
}
builder.addBinaryBody("file",inputStream,ContentType.MULTIPART_FORM_DATA,fileName);
post.setEntity(builder.build());
HttpResponse response = context.execute(post);
String re = new String(EntityUtils.toByteArray(response.getEntity()));
return re;
}
} 创建一个 HttpClient 实例,这个实例需要调用 Dispose 方法释放资源,这里使用了 using 语句。接着调用 GetAsync,给它传递要调用的方法的地址,向服务器发送 Get 请求。