1. 程式人生 > >Ajax實現異步上傳圖片

Ajax實現異步上傳圖片

添加 www. request 設置 支持 bsp sta mat javax

要求:點擊頁面瀏覽按鈕後,選擇需要上傳的圖片,頁面無刷新,將上傳的圖片展示出來

開發流程

一:在頁面編寫表單代碼和js代碼

[html] view plain copy <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Ajax異步上傳圖片</title>

<-- 引入jQuery異步上傳js文件 -->

<script src="/resource/jquery.form.js" type="text/javascript"></script>

<!-- Ajax異步上傳圖片 -->

<script type="text/javascript">

function uploadPic() {

// 上傳設置

var options = {

// 規定把請求發送到那個URL

url: "/upload/uploadPic.do",

// 請求方式

type: "post",

// 服務器響應的數據類型

dataType: "json",

// 請求成功時執行的回調函數

success: function(data, status, xhr) {

// 圖片顯示地址

$("#allUrl").attr("src", data.path);

}

};

$("#jvForm").ajaxSubmit(options);

}

</script>

</head>

<body>

<form id="jvForm" action="o_save.shtml" method="post" enctype="multipart/form-data">

<table>

<tbody>

<tr>

<td width="20%">

<span>*</span>

上傳圖片(90x150尺寸):</td>

<td width="80%">

註:該尺寸圖片必須為90x150。

</td>

</tr>

<tr>

<td width="20%"></td>

<td width="80%">

<img width="100" height="100" id="allUrl"/>

<!-- 在選擇圖片的時候添加事件,觸發Ajax異步上傳 -->

<input name="pic" type="file" onchange="uploadPic()"/>

</td>

</tr>

  1. </tbody>
  2. </table>
  3. </form>
  4. </body>
  5. </html>

實現步驟:

1.編寫form表單input類型為file

2.為頁面保存按鈕添加onchange事件

3.編寫js代碼,使用jQuery提交form表單(jQuery.form.js文件,可以自動模擬出一個form表單),請求路徑

4.頁面編寫暫時到這裏

二:在後臺實現圖片的上傳

這裏使用的是springmvc(註解開發)圖片上傳

[java] view plain copy
  1. package com.wanghang.upload;
  2. import java.io.IOException;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.json.JSONObject;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.multipart.MultipartFile;
  9. /**
  10. * Ajax異步上傳圖片
  11. *
  12. * @author Hang.W
  13. * @version 1.0, 2017-02-14 00:51:39
  14. */
  15. @Controller
  16. public class UploadController {
  17. /**
  18. * 使用Ajax異步上傳圖片
  19. *
  20. * @param pic 封裝圖片對象
  21. * @param request
  22. * @param response
  23. * @throws IOException
  24. * @throws IllegalStateException
  25. */
  26. @RequestMapping("/upload/uploadPic.do")
  27. public void uploadPic(MultipartFile pic, HttpServletRequest request, HttpServletResponse response) throws IllegalStateException, IOException {
  28. try {
  29. // 獲取圖片原始文件名
  30. String originalFilename = pic.getOriginalFilename();
  31. System.out.println(originalFilename);
  32. // 文件名使用當前時間
  33. String name = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
  34. // 獲取上傳圖片的擴展名(jpg/png/...)
  35. String extension = FilenameUtils.getExtension(originalFilename);
  36. // 圖片上傳的相對路徑(因為相對路徑放到頁面上就可以顯示圖片)
  37. String path = "/upload/" + name + "." + extension;
  38. // 圖片上傳的絕對路徑
  39. String url = request.getSession().getServletContext().getRealPath("") + path;
  40. File dir = new File(url);
  41. if(!dir.exists()) {
  42. dir.mkdirs();
  43. }
  44. // 上傳圖片
  45. pic.transferTo(new File(url));
  46. // 將相對路徑寫回(json格式)
  47. JSONObject jsonObject = new JSONObject();
  48. // 將圖片上傳到本地
  49. jsonObject.put("path", path);
  50. // 設置響應數據的類型json
  51. response.setContentType("application/json; charset=utf-8");
  52. // 寫回
  53. response.getWriter().write(jsonObject.toString());
  54. } catch (Exception e) {
  55. throw new RuntimeException("服務器繁忙,上傳圖片失敗");
  56. }
  57. }
  58. }

圖片上傳

1.springmvc進行參數綁定,但默認是不支持圖片上傳的,可以在springmvc的配置文件中進行文件上傳的配置

2.設置pic形參,接收頁面傳遞的參數

3.普通文件上傳代碼

4.將圖片以json格式寫回頁面

5.圖片上傳部分完成

頁面圖片展示

1.使用jQuery動態獲取到<img>標簽的id

2.將獲取到的json數據賦值到<img>標簽的src屬性

3.賦值完後,就完成了圖片頁面無刷新顯示

      來源:http://blog.csdn.net/java__project/article/details/55062816

Ajax實現異步上傳圖片