我们在开发的时候经常遇到一个场景,在修改一个对象信息的时候,会让图片上传上去,并加显。比如个人信息的头像上传,品牌信息的图片上传
分析:
1. 这种场景下我们经常会使用ajax异步传输的方式来实现这个功能。
2. 我们这里使用的是基于springmvc开发的。所有需要给springmvc进行配置.(添加一个接收文件的配置文件,搭建环境这里不提)。
3.当图片较多的时候,需要用到fastDFS专门设置一个图片服务器
<script src="/js/jquery.form.js" type="text/javascript"></script>
第二步:编辑前端页面
<!--表单-->
<form id="jvForm" >
<input type="file" name="pic" onchange="uploadPic()"/>
</form>
<!--js-->
<script type="text/javascript">
function uploadPic(){
var option={
url:"/upload/uploadPic.do", <!--提交到后台的地址,让controller接收-->
type:"POST",
dataType:"json", <!--注意这里dataType:"json" 中的json不能是大写的 要不不识别,返回的json字符串,小写的返回json对象-->
success:function(data){
alert(data); //返回的是 Object object为json对象 否则为json字符串
// 图片回显
$("#allUrl").attr("src",data.allUrl);
}
}
$("#jvForm").ajaxSubmit(option);
}
</script>
第三步:在后台spring配置文件上传解析器
<!-- 配置上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver>
<property name="maxUploadSize" value="5242880"></property>
</bean>
第四步:后台处理
@RequestMapping("/upload")
public class UploadController {
@Resource
private UploadService uploadService;
@SuppressWarnings("deprecation")
@RequestMapping("/uploadPic.do")
public void uploadPic(MultipartFile pic,HttpServletRequest
request,HttpServletResponse response) throws Exception{
<!--形参上的pic必须和前台页面的传递的<input>标签的name中的值一样-->
<!--这里是调用方法保存图片-->
String path=uploadService.uploadPic(pic.getBytes(), pic.getOriginalFilename());
//图片回显
String allUrl=XinbabaConstants.IMG_URL+path;
JSONObject jsonObject=new JSONObject();
jsonObject.put("allUrl", allUrl); //图片完整url
jsonObject.put("imgUrl", path); //图片部分URL
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(jsonObject.toString());
}
}
说明:将json对象返回,在前台通过j操作将值图片地址添加到<img>标签中 至此图片就算回显完成,下面的操作就是将图片添加到服务器中,也就是说的保存图片
第五步:保存图片到fastDFS服务器上
service层
/**
* 附件上传至FastDFS
*/
@Override
public String uploadPic(byte[] file_buff, String filename) throws Exception {
<!--调用fastDFS工具完成图片上传 file_fuff是文件的字节数组,finame 文件的直实名称-->
String path = FastDFSUtil.uploadPicToFDFS(file_buff, filename);
return path; //返回图片的路径
}
|