zimg icon indicating copy to clipboard operation
zimg copied to clipboard

Spring框架from表单提交多图到Zimg

Open hjjoe1213123 opened this issue 9 years ago • 8 comments

public HttpServletResponse uploadFile(HttpServletRequest request){
    MultipartHttpServletRequest mRequest = null;
    MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());

    // 获取request
    try {
        mRequest = resolver.resolveMultipart(request);
        mRequest.setCharacterEncoding("UTF-8");
    } catch (Exception e1) {
        e1.printStackTrace();
    }

    // 获取文件map
    Map<String, MultipartFile> files = mRequest.getFileMap();

    // 检查是否包含文件信息
    if (null == files || files.size() == 0) {
        System.out.println("图片上传异常");
    }

    String uploadUrl="http://192.168.11.11:4869";
    // 保存文件至服务器指定路径
    String fileName = null;
    for (String key : files.keySet()) {
        MultipartFile file = files.get(key);
        fileName = file.getOriginalFilename();

        String fileType = fileName.substring(fileName.lastIndexOf(".")+1, fileName.length());

        byte[] imgData = null;
        try {
            imgData = file.getBytes();
        } catch (IOException e) {
            e.printStackTrace();
        }

        String retJson = HttpTookit.sendPost(uploadUrl, imgData, fileType);
        //json解析有很多框架,所以不做参考了
        System.out.println(retJson);
    }
    return null;
}

HttpTookit.sendPost方法可以参考https://github.com/buaazp/zimg/issues/114

hjjoe1213123 avatar Sep 02 '15 08:09 hjjoe1213123

That's good!

buaazp avatar Sep 06 '15 05:09 buaazp

用这种方式每次只能上传一张吗? 我现在只要设置header 为jpg或者其他,返回json是成功,但是直接访问md5就失败。如果不加这个头,返回的是上传的所有图片md5的html,这个时候访问就成功,目前还不清楚原因。

longzhiyou avatar Sep 15 '15 14:09 longzhiyou

@longzhiyou 你说的这个情况很奇怪我从未见过,麻烦把两次请求时zimg的log摘出来我看看是什么情况。

buaazp avatar Sep 15 '15 15:09 buaazp

#####前提是相同的一张照片,一个用curl上传,一个用java httpclient上传。 curl-cmd-res curl-package httpclient-package httpclient-res

2015/09/16 10:33:07:844013 [INFO] 192.168.1.229 succ post pic:6fea5aca5c69aac4e76ab4fe82617795 size:82429 2015/09/16 10:38:25:020131 [INFO] 192.168.1.229 succ post pic:ca621fafa37456d6ae478c4004ff0a23 size:82640 先把照片上传一下。

longzhiyou avatar Sep 16 '15 02:09 longzhiyou

用抓包软件看到,body中两种方式上传的内容是不同的,后面的我是直接上传的二进制图片,如果我把这个二进制数据直接保存file确定是没有问题的,但是上传后,返回成功,得到的md5是不正确的。

longzhiyou avatar Sep 16 '15 02:09 longzhiyou

{"ret":false,"error":{"code":1,"message":"File type not support."}} 什么情况

RobinMeng avatar Apr 08 '16 11:04 RobinMeng

个人建议 在js界面上能不能直接与zimg服务器通信呢,而不是在后台的coller里接受完了在去保存到图片服务器上,因为在[MultipartResolver]的时候,是意味着客户端已经将图片发送到web服务器上(可以查看一下MultipartFile的属性能找到在web服务器的临时目录中)这样是不是性能损耗很多,我目前这个项目做的在js也就是客户端直接与图片服务器进行通信,当然如果有业务需求的话,需要临时图片可以这样做

likai2016 avatar Apr 15 '16 06:04 likai2016

js可以直接与zimg服务器通信啊,百度有一个webload实现了图片的压缩,与二进制上传

hjjoe1213123 avatar Apr 25 '16 03:04 hjjoe1213123