1. 程式人生 > >Ajax使用formData提交帶圖片上傳的表單

Ajax使用formData提交帶圖片上傳的表單

記錄一下今天踩過的坑。。這麼個問題居然搞了快兩個小時了。ssm框架,前臺form帶圖片上傳,因為效驗表單資料,所以不能直接submit。

formDat還是很簡單的,有很多加值得方法,後臺可以直接用物件接收。

使用ajax提交有很多種方式,說一下使用formDat,直接貼程式碼。

前端一個form表單,帶圖片

其實很簡單,只需注意幾個點。

1、用formData格式傳輸引數Controller的引數名也要和form表單name對應

2、因為我之前是用var file = $('#file').val();得到的file,後臺用MultipartFile file一直接收不到(就是這地方搞了好久)

後來慢慢調錯,發現Controller裡用String file 就能收的到,就覺得肯定是前臺傳過來的不對,然後前臺alert(file)發現是圖片路徑,不是Object物件,是一個字串

實在沒想到。。。改成這樣就好了。

直接new formData(“form...”) 好像也是傳的string型別圖片。

省略了很多.....這編輯器不好寫程式碼,複製過來又會亂。。等改善吧

反正遇到問題一步一步來,腦子蒙圈實在不知道哪有問題,看程式碼好像哪也沒有問題...這時候就要不斷調式縮小範圍,然後排除一些不可能有問題的地方,針對一些可能會有問題或者不確定有沒有問題的地方不斷測試,利用debug 和 控制檯輸出。總是能解決的。

 

1

2

3

4

5

6

7

8

9

10

11

<form id="form1"  enctype="multipart/form-data">

            <label class="aui-label-control"> 暱稱 </label>

                    

<input type="text"  name="userName" id="1" 

            <label class="aui-label-control"> 手機號碼 </label>

                    <input type="text"  name="phone" id="2" "/>

            <label class="aui-label-control"> 所在城市 </label>

                    <input type="text"  name="city" id="3"  />

            <label class="aui-label-control"> 更換頭像  </label>

                    <input type="file" name="file" id="file" multiple />

                <a onclick="severCheck()" >確認修改</a> 

 </form>

js程式碼:ajax提交

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

function severCheck() {

            var formData = new FormData();

            var userName = $("#1").val();

            var file = $("#file")[0].files[0];

            var phone = $("#2").val();

            var userId = $("#userId").val();

            var city = $("#3").val();

            var reg = /^1[34578]\d{9}$/;

            var bool = false;

            if (userName.length < 1 || userName.length > 12) {

               ...

            } else {

                ...

            }

     

            if (phone != "" && !(reg.test(phone))) {

                ...

                return false;

            }

            if ( city != "" && city.length > 10) {

                ...

                    return false;

            }

     

            if (bool) {

                return false;

            }

             

            if (file != "") {

                formData.append("file", file);

            }

            formData.append("city",  city);

            formData.append("userName", userName);

            formData.append("userId", userId);

            formData.append("phone", phone);

            $.ajax({

                type : "POST",

                url "<%=path%>/editUserInfo",

                data : formData,

                cache : false,

                processData : false,

                contentType : false,

                success : function(data) {

                    window.location.reload();

                    if ("success" == data.msg) {

                       ...

                        window.location.href = "<%=path%>/index";

                    } else if ("error" == data.msg) {

                       ....

                    }

                },

              error:function(data){

                    window.location.reload();

                    if ("success" == data.msg) {

                       ...

                        window.location.href = "<%=path%>/index";

                    } else if ("error" == data.msg) {

                        ....

                    }

              }

            });

        }

 

後端程式碼:springmvc接收後端程式碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

 @RequestMapping("/editUserInfo")

    @ResponseBody

    public JSONObject EditUserInfo(HttpSession session, HttpServletRequest request,

        @RequestParam(value = "file", required = false) MultipartFile file, 

        UserInfo userInfo) {

        JSONObject json = new JSONObject();

        

        // 圖片上傳

        // 如果檔案不為空,寫入上傳路徑

        if (Tools.isNotEmpty(file)) {

            // 迴圈獲取file陣列中得檔案

            // 上傳檔案

            String fileName = Tools.saveFile(file, request);

            //圖片路徑儲存到資料庫

            userInfo.setHeadUrl(fileName);

        }

        userInfo.setUpdatetime(new Date());

        int result = userInfoService.editUserInfo(userInfo);

        if (result == 1) {

            // session.removeAttribute("pagenum");          

            json.put("msg""success");

 

        } else {

            json.put("msg""error");

        }

        return json;

    }

1

 var file = $("#file")[0].files[0];

  • 其實很簡單,只需注意幾個點。

    1、用formData格式傳輸引數Controller的引數名也要和form表單name對應

    2、因為我之前是用var file = $('#file').val();得到的file,後臺用MultipartFile file一直接收不到(就是這地方搞了好久)

    後來慢慢調錯,發現Controller裡用String file 就能收的到,就覺得肯定是前臺傳過來的不對,然後前臺alert(file)發現是圖片路徑,不是Object物件,是一個字串

    實在沒想到。。。改成這樣就好了。

    直接new formData(“form...”) 好像也是傳的string型別圖片。

    省略了很多.....這編輯器不好寫程式碼,複製過來又會亂。。等改善吧

    反正遇到問題一步一步來,腦子蒙圈實在不知道哪有問題,看程式碼好像哪也沒有問題...這時候就要不斷調式縮小範圍,然後排除一些不可能有問題的地方,針對一些可能會有問題或者不確定有沒有問題的地方不斷測試,利用debug 和 控制檯輸出。總是能解決的。

  •