ajax实现异步图片上传并回显

ajax可以使网页实现异步更新。这意味这可以在不重新加载整个网页的情况下,对网页的某个部分进行更新。今天使用ajax上传图片,并且将图片的路径以json格式返回到界面,达到回显的效果。 1.导入相关依赖包及相关js文件

<!--文件上传-->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.1</version>
</dependency>
<!--fastjson的依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.4</version>
</dependency>

注意:将ajax表单提交的jquery插件jquery-form.js放进项目的js文件夹中,并用代码引入。

<!-- 引入jQuery异步上传js文件 -->
<script src="../../js/jquery-form.js" type="text/javascript"></script>

2.前端代码 (1)静态页面

<form id="upload" class="form-signin" method="post" enctype="multipart/form-data">
    商品图片:<img id="pic" src="" width="100">
    <input type="file" name="img" class="input-block-level" onchange="uploadPic()"/>
</form>

(2)js代码

<!-- Ajax异步上传图片 -->
<script type="text/javascript">
    function uploadPic() {    // 上传设置
        var options = {
            // 规定把请求发送到那个URL
            url: "${pageContext.request.contextPath}/admin/upload",
            // 请求方式
            type: "post",
            // 服务器响应的数据类型
            dataType: "json",
            // 请求成功时执行的回调函数
            success: function (result) {
                // 图片显示地址
                $("#pic").attr("src", "/images"+result.path);
                //将图片路径复制给隐藏区
                $("#imageId").val(result.path);
            }
        };
        $("#upload").ajaxSubmit(options);
    }
</script>

3.后台代码实现

//上传图片
@RequestMapping("/upload")
@ResponseBody//加上该注解返回json数据
public String upload(@RequestParam("img")MultipartFile file, HttpServletRequest request) throws Exception {
    // 保存图片的路径,图片上传成功后,将路径保存到数据库
    String filePath = request.getSession().getServletContext().getRealPath("images/products");
    System.out.println(filePath);
    // 生成文件新的名字
    String newFileName = UUID.randomUUID() + ".jpg";
    // 封装上传文件位置的全路径
    File targetFile = new File(filePath, newFileName);
    if (!targetFile.exists()) {
        targetFile.mkdirs();
    }
    //上传文件
    file.transferTo(targetFile);
    String path = "/products/" + newFileName;
    JSONObject jsonObject = new JSONObject();
    //将路径放入json对象中
    jsonObject.put("path", path);
    String json = JSON.toJSONString(jsonObject);
    //返回json对象
    return json;
}

注:由于返回的是json数据,要在方法前加上注解@ResponseBody,加上该注解后return返回的是json数据。

4.效果:

经验分享 程序员 微信小程序 职场和发展