zimg
zimg copied to clipboard
Spring框架from表单提交多图到Zimg
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
That's good!
用这种方式每次只能上传一张吗? 我现在只要设置header 为jpg或者其他,返回json是成功,但是直接访问md5就失败。如果不加这个头,返回的是上传的所有图片md5的html,这个时候访问就成功,目前还不清楚原因。
@longzhiyou 你说的这个情况很奇怪我从未见过,麻烦把两次请求时zimg的log摘出来我看看是什么情况。
#####前提是相同的一张照片,一个用curl上传,一个用java httpclient上传。
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 先把照片上传一下。
用抓包软件看到,body中两种方式上传的内容是不同的,后面的我是直接上传的二进制图片,如果我把这个二进制数据直接保存file确定是没有问题的,但是上传后,返回成功,得到的md5是不正确的。
{"ret":false,"error":{"code":1,"message":"File type not support."}} 什么情况
个人建议 在js界面上能不能直接与zimg服务器通信呢,而不是在后台的coller里接受完了在去保存到图片服务器上,因为在[MultipartResolver]的时候,是意味着客户端已经将图片发送到web服务器上(可以查看一下MultipartFile的属性能找到在web服务器的临时目录中)这样是不是性能损耗很多,我目前这个项目做的在js也就是客户端直接与图片服务器进行通信,当然如果有业务需求的话,需要临时图片可以这样做
js可以直接与zimg服务器通信啊,百度有一个webload实现了图片的压缩,与二进制上传