使用AngularJS和Java Spring发布表单数据

时间:2015-09-25 20:15:06

标签: java angularjs spring jsp spring-mvc

我有一个jsp文件,我在其中上传文件。对于文件的后端处理,我在春天制作了一个控制器。但它在控制台中返回错误:字符串参数'name'不存在?我的代码是 -

JSP文件

<input class="fileInput" type="file" id="fileInput" accept="image/gif, image/jpeg, image/png" />
<button type="button" ng-click="saveProfile()">Update</button>

JS档案

$scope.username = 01238339595;
$scope.saveProfile = function() {
                    var input = document.getElementById('fileInput');
                    if (input.files && input.files[0]) {
                        var formData = new FormData();
                        formData.append("name", $scope.username);
                        formData.append("file", input.files[0]);
                        console.log("form data " + formData);
                        $http.post("save-avatar", formData)
                            .success(function(data, status, headers,config) {
                                                        console.log('Success');
                                                    })
                            .error(function(data, status, headers, config) {
                                                        console.log('Error');
                                                    });
                    }
                };

控制器

@RequestMapping(value = "save-avatar", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file,
        HttpServletRequest request) throws IOException {
    if (file.isEmpty())
        throw new IOException("File Field is Empty");

    ServletContext servletContext = request.getSession().getServletContext();
    String absoluteDiskPath = servletContext.getRealPath("/");

    File folder = new File(absoluteDiskPath + "/avatar/");
    if (!folder.exists())
        folder.mkdirs();

    File avatarFile = new File(folder, name + ".jpg");
    if (!avatarFile.exists())
        avatarFile.createNewFile();

    FileOutputStream outputStream = null;
    try {
        outputStream = new FileOutputStream(avatarFile);
        outputStream.write(file.getBytes());
    } finally {
        if (outputStream != null)
            outputStream.close();
    }

    return "redirect:/avatar-profile?name=" + name;
}

在我的配置xml中:

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760" />
</bean>

1 个答案:

答案 0 :(得分:1)

使用以下代码:而不是上述控制器方法:

@RequestMapping(value = "/save-avatar", method = RequestMethod.POST)
public void UploadFile(MultipartHttpServletRequest request, HttpServletResponse response) {

    Iterator<String> itr = request.getFileNames();
    MultipartFile file=null;

    while (itr.hastNext()) {
        file = request.getFile(itr.next());
        String name = request.getParameter("name");

        //Do your stuff here.......
    }
}