SpringMVC 利用HttpPost向服务端接口上传文件

现在Spring的广泛使用使得以前我们在做文件上传的不需要对数据进行转码传输,MultipartEntity内封装了各种方法,我们可以直接在客户端实例化

MultipartEntity类将需要上传的文件以参数的形式写入HttpPost的Entity,这样类似与在前端使用form表单提交来实现文件上传,区别是前端我们是在form里面设定enctype="multipart/form-data"这个参数。废话不多说,下面是代码;

首先是客户端:

import java.io.File;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils; 

public class FileUploadClient {

    public void SubmitPost(String url, String file36Path, String file48Path, String file72Path,
            String file96Path, String file144Path) {

        HttpClient httpclient = new DefaultHttpClient();

        try {

            HttpPost httppost = new HttpPost(url);

            FileBody file36 = new FileBody(new File(file36Path));
            FileBody file48 = new FileBody(new File(file48Path));
            FileBody file72 = new FileBody(new File(file72Path));
            FileBody file96 = new FileBody(new File(file96Path));
            FileBody file144 = new FileBody(new File(file144Path));

            MultipartEntity reqEntity = new MultipartEntity();

            reqEntity.addPart("file36", file36);// file36为请求后台的File upload;属性
            reqEntity.addPart("file48", file48);
            reqEntity.addPart("file72", file72);
            reqEntity.addPart("file96", file96);
            reqEntity.addPart("file144", file144);

            httppost.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(httppost);

            int statusCode = response.getStatusLine().getStatusCode();

            if (statusCode == HttpStatus.SC_OK) {

                System.out.println("服务器正常响应.....");

                HttpEntity resEntity = response.getEntity();

                System.out.println(EntityUtils.toString(resEntity));// httpclient自带的工具类读取返回数据

                System.out.println(resEntity.getContent());//这里是服务端的返回值

                EntityUtils.consume(resEntity);
            }

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                httpclient.getConnectionManager().shutdown();
            } catch (Exception ignore) {

            }
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        FileUploadClient fileUploadClient = new FileUploadClient();

        fileUploadClient.SubmitPost(
                "http://127.0.0.1:8080/testProject/pictureUploadInterface.htm",
                "C://app_icon1.png", "C://app_icon2.png", "C://app_icon3.png", "C://app_icon4.png", "C://app_icon5.png");
    }

}

至于服务端,和Spring实现的一样

  /**
     * 图片上传接口
     *
     * @param request
     * @param response
     * @param session
     * @return
     * @throws IOException
     */
    @RequestMapping(value = "/pictureUploadInterface", method = RequestMethod.POST)
    public String pictureUploadInterface(HttpServletRequest request,
            HttpServletResponse response, HttpSession session,
            @RequestParam("file36") MultipartFile file36,
            @RequestParam("file48") MultipartFile file48,
            @RequestParam("file72") MultipartFile file72,
            @RequestParam("file96") MultipartFile file96,
            @RequestParam("file144") MultipartFile file144)
            throws IOException {
        String filePath = "D://test";

        // 响应客户端
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        if (file36.isEmpty() && file48.isEmpty()
                && file72.isEmpty() && file96.isEmpty() && file144.isEmpty()) {
            out.write(-102);//-102 上传的图片全部为空
            return null;
        }
        if((game==null||game.equals(""))||(channel==null)||channel.equals("")){
            out.write(-100);//-100 参数错误
            return null;
        }

        if (!file36.isEmpty()) {
            if (!FilenameUtils.getExtension(file36.getOriginalFilename())
                    .equalsIgnoreCase("png")) {
                out.write(-101);//-101 图片格式错误
                return null;
            } else {
                String path = filePath + File.separator + "drawable-ldpi"
                        + File.separator + "app_icon.png";
                byte[] file36Byte = file36.getBytes();
                FileUtils.writeByteArrayToFile(new File(path), file36Byte);
                out.write(200);
            }
        }
        if (!file48.isEmpty()) {
            if (!FilenameUtils.getExtension(file48.getOriginalFilename())
                    .equalsIgnoreCase("png")) {
                out.write(-101);
                return null;
            } else {
                String path = filePath + File.separator + "drawable"
                        + File.separator + "app_icon.png";
                byte[] file48Bype = file48.getBytes();
                FileUtils.writeByteArrayToFile(new File(path), file48Bype);
            }
        }
        if (!file72.isEmpty()) {
            if (!FilenameUtils.getExtension(file72.getOriginalFilename())
                    .equalsIgnoreCase("png")) {
                out.write(-101);
                return null;
            } else {
                String path = filePath + File.separator + "drawable-hdpi"
                        + File.separator + "app_icon.png";
                byte[] file72Byte = file72.getBytes();
                FileUtils.writeByteArrayToFile(new File(path), file72Byte);
            }
        }
        if (!file96.isEmpty()) {
            if (!FilenameUtils.getExtension(file96.getOriginalFilename())
                    .equalsIgnoreCase("png")) {
                out.write(-101);
                return null;
            } else {
                String path = filePath + File.separator + "drawable-xhdpi"
                        + File.separator + "app_icon.png";
                byte[] file96Byte = file96.getBytes();
                FileUtils.writeByteArrayToFile(new File(path), file96Byte);
            }
        }
        if (!file144.isEmpty()) {
            if (!FilenameUtils.getExtension(file144.getOriginalFilename())
                    .equalsIgnoreCase("png")) {
                out.write(-101);
                return null;
            } else {
                String path = filePath + File.separator + "drawable-xxhdpi"
                        + File.separator + "app_icon.png";
                byte[] file144Byte = file144.getBytes();
                FileUtils.writeByteArrayToFile(new File(path), file144Byte);
            }
        }
        out.write(200);//200 上传图片成功
        out.close();
        return null;
    }

这里需要的JDR包

httpclient-4.2.jar

httpclient-cache-4.2.jar

httpcore-4.2.jar

httpmime-4.2.jar

commons-logging-1.1.1.jar

时间: 2024-08-02 06:54:28

SpringMVC 利用HttpPost向服务端接口上传文件的相关文章

MIME类型-服务端验证上传文件的类型

MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件. web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类. Tomcat的安装目录/conf/web.xml 中就定义了大量MIME类型 ,你可也去看一下. 最近在做用表单上传文件,想在服务端验证上传文件的类型,只允许上传GIF,JPG,ZIP, 我们有两种方法, 第一:检查文件的扩展名, 第二:检查文

SpringMVC系列(四)注解方式上传文件

本文主要介绍SpringMVC上传文件的两种方式 第二种较第一种而言,采用了解析器,大大提高了上传的效率. 第一种: 步骤: 1.引入jar包 2.配置spring-servlet.xml文件 <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.Commons

SpringMVC基础(二)采用注解上传文件

Spring通过对Servlet API的HttpServletRequest接口进行扩展,使其能够很好地出来文件上传.扩展后的接口名为:org.springframework.web.multipart.MultipartHttpServletRequest. 同时需要注意的是,上传文件无论什么框架都需要用到"enctype"上传方式必须采用method方式. 上传两个jar包: com.springsource.org.apache.commons.fileupload com.s

POSTMAN测试SpringMVC RESTFul风格的服务端接口始终得不到值

后台接口中接收参数使用DataObject(包含一个String类型的属性data)     ServletRequestDataBinder binder = new ServletRequestDataBinder(new DataObject());     binder.bind(request); 然后再POSTMAN中使用如图的方式传参: 可以发现得到的返回值是null,而且根据后台调试,确实没有得到传入的参数.切回x-www-form-urlencoded模式下然后将此对象用如下方

PHP如何通过CURL上传文件

PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以“@”开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变量$_FILES中取到相应的上传文件信息. 下面我们以一个例子来展示这个过程. 假设本地有一个文本文件log.txt,其路径为“/www/test/log.txt”,内容如下: this is a file for testhello PythonTab!为了把这个文件上传给服务端的脚本http:/

关于上传文件的跨域问题

在进行新框架开发的过程中,需要自定义页面组件实现脱离表单的文件(图片)上传,考虑过wex5自带的attachmentsimple的自定义写法很难受,就改用了第三方插件webuploader来实现选择文件后调用服务端的上传文件接口实现自动上传. 中间遇到过跨域问题,即服务端所在接口域名与插件包(前端)不在同一域名下,但是由于格式是文件,所以必须采用post传输方式 解决方法: 利用CORS实现POST方式跨域请求数据 CORS全名Cross-Origin Resource Sharing,顾名思义

api服务端接口安全

api服务端接口安全性解析 http://blog.csdn.net/tenfyguo/article/details/8225279 常用的基于token的实现方案 http://blog.csdn.net/tenfyguo/article/details/8225279 token常常用在各种应用中,如下场景: 1,用户输入密码和帐号后,系统进行验证后,生成一个session,分配一个sessionid给使用者,后续服务使用者就无需每次都输入密码和验证密码了,只需把对应的帐户和session

springmvc利用jqueryupload上传文件,后台处理方法

public void importIdentifySchemeFile(Integer id,Integer type,HttpServletRequest request, HttpServletResponse response){ PrintWriter out = null;          try {              //初始化变量              InputStream stream = null;              String ret_fileNa

(H5)FormData+AJAX+SpringMVC跨域异步上传文件

最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="js/plugins/