httpclient 上传图片

背景:前端上传图片,后台接收到,转发给第三方系统或文件系统。

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;
    }
}

原文地址:https://www.cnblogs.com/yrjns/p/12051216.html

时间: 2024-08-05 10:01:26

httpclient 上传图片的相关文章

WCF4.0 –- RESTful WCF Services

转自:http://blog.csdn.net/fangxinggood/article/details/6235662 WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求,无需去实现复杂的客户端代理,无需使用复杂的数据通讯方式既可以将我们的服务暴露给任何需要的人,无论他使用 VB.Ruby.JavaScript,甚至是 HTML FORM,或者直接在浏览器地址

WebClient和HttpClient, 以及webapi上传图片

httppost请求. applicationkey/x-www-form-urlencoded 请求: Email=321a&Name=kkfew webapi里面, 如果用实体, 能接受到. 因为这是一个属性一个属性去匹配的原因 application/json 请求:{Email:321a  ,  Name:kkfew} 如果接收参数为dynamic, 则没有问题. 因为直接把json对象转化成dynamic对象了 using (WebClient webclient = new WebC

微信JS-SDK实现上传图片功能

最近在项目开放中,有一个在微信WEB项目中上传图片的需求,一开始使用了传统的<input type="file">的方式去实现,但是后面发现在使用这种传统模式时会由于手机系统的差异而导致一系列的问题,后改用微信JSSDK的方式来实现. 总的来说,利用JSSDK来实现该功能一共分为四步. 1. 调用wx.config(),初始化jssdk的配置,并在jsApiList中配置上传图片需要的四个api('chooseImage','previewImage','uploadIma

【原创】.Net 微信 JS-SDK图片、语音上传接口的实现(MVC)-(二 、上传图片服务器操作)

上一篇文章,已经介绍过关于微信上传图片的前端JS-SDK , 如果有没看到第一篇的朋友, 可以先看看第一篇 http://www.cnblogs.com/29boke/p/5483599.html 好了,现在继续向大家介绍,我们.NET 是如何实现图片上传到自己的服务器的. 上次提到, function upload() {             wx.uploadImage({                 localId: images.localId[i],              

android上传图片到PHP后台全过程

PS:便宜的服务器可是会不定时的坑你一把. 今天在修改app的一些交互以及重构代码.一切都是那么顺利,啪啪啪,runing,测试没问题,再啪啪啪... 突然,测试上传头像的时候,老是连接超时....报如下错误: XXXXXXSokcetTimeOutXXXXXXXX 然后自己设置HTTP的超时时间: //设置超时时间 httpclient.setTimeout(20000); 再building,runing,还是不行....这就怪了,明明好好的,怎么会突然就变成连接超时了呢!又折腾了一阵子后,

Libcurl上传图片

最近使用C++做一些编程,JAVA中采用HTTP协议通信很简单,我们熟知的HTTPClient就可以完成通信.在C++中BOOST库仅仅将TCP/UDP协议进行了很好的封装,但是HTTP需要我们自己在编写一部分代码才能很好的同步HTTP来完成客户端与服务器端的信息交互.libcurl对HTTP等协议进行了很好的封装,于是采用libcurl来完成图片上传的功能. 1.libcurl简单认识 libcurl支持用不同的协议连接和沟通不同的服务器,其支持http, https, ftp, gopher

调用graph api上传图片到facebook

前言 最近实习的任务是做个类似facebook第三方客户端, 要求用graph api. 调用graph api就是普通的http请求, 但是facebook在这方面挖了不少坑, 特别恶心. 写篇文章记录一下, 顺便介绍一下思路和方法, 有好几个方法, 有的成功了, 有的失败了, 会具体分析, 最后有一个最佳的方法. 图片上传 sdk文档的错误 查询facebook的graph api文档可以知道如果使用sdk上传图片, 需要使用下面的代码 Bundle params = new Bundle(

关于安卓调用C#的WebService上传图片问题(不使用ksoap2)

============问题描述============ 小弟初学安卓开发.最近需要做一个图片上传的功能. 我是用java开发安卓,调用C#的WebService.在网上找到一大堆资料,几乎全部是用ksoap2包的. 请注意,我想做的是不用ksoap包的. 我现在的方法是从android端用读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数传到服务器端,服务端解码该字符串,最后保存到相应的路径下.整个上传过程的关键就是以字节流的字符串进行数据传

《android上传图片》

这是主函数 package com.zmb.updemo; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.