server:
@requestmapping(value = "/url/{size}/{id}", method = requestmethod.get) public void getportfoliofile(httpservletresponse response, @pathvariable("id") int id, @pathvariable("size") int size) { file img = provider.getimage(id, size); if (img != null) { try { filecopyutils.copy(filecopyutils.copytobytearray(img), response.getoutputstream()); string mimetype = img.tourl().openconnection().getcontenttype(); response.setcontenttype(mimetype); response.setcontentlength((int) img.length()); response.setheader("content-transfer-encoding", "binary"); response.setheader("content-type", "binary/octet-stream"); response.setheader("content-disposition", "attachment; filename=\"" + img.getname() + "\""); } catch (ioexception e) { e.printstacktrace(system.err); } } } html:
<img src="/url/2/${id}" onerror="$('#c').empty();" /> the problem ie10 don't display image. response body contains image, headers 200 ok. whan can be?
check in:
- chrome v43.0.2357.132
- firefox developer edition v40
- ie v10
you need set headers before write content, else ignored.
string mimetype = img.tourl().openconnection().getcontenttype(); response.setcontenttype(mimetype); response.setcontentlength((int) img.length()); response.setheader("content-transfer-encoding", "binary"); response.setheader("content-type", "binary/octet-stream"); response.setheader("content-disposition", "attachment; filecopyutils.copy(filecopyutils.copytobytearray(img), response.getoutputstream()); edit: content-type "binary/octet-stream" not make sense. here expect "image/gif" or other appropriate content type. eliminate content-disposition header.
Comments
Post a Comment