将文件作为Spring 4和thymeleaf中表单的一部分上传

时间:2016-05-20 01:07:16

标签: java jquery ajax spring thymeleaf

我必须创建公司,其中一个必填字段是公司徽标。我创建了以下表单:

<form action="#" th:object="${createCompanyForm}" method="post" id="save">

<input type="text" name="name" th:field="*{name}" th:value="${createCompanyForm.name}" th:class="form-control" data-rule-required="true"/>

<input type="text" name="companyId" th:field="*{companyId}" th:value="${createCompanyForm.companyId}" />

<input type="file" name="companyLogo" id="logo" th:field="*{companyLogo}" th:value="${createCompanyForm.companyLogo}"/>

</form>

我要做的是创建公司并将公司徽标作为表单的一部分上传,这是我的百里香形式

function save() {
        var formData = $('#save').serializeArray();        
        $.ajax({
            url : "create",
            type: "POST",
            timeout:5000,
            data: formData,
            contentType: 'application/x-www-form-urlencoded',
            cache: false,
            success:function(response){
                alert(response.message);
            },
            error: function(response){
                alert(response.message);
            }
        });
    };

此表单使用jquery函数提交

@RequestMapping(
            value = "/create",
            method = RequestMethod.POST,
            consumes = "application/x-www-form-urlencoded",
            produces = "application/json")
    @ResponseBody
    public JsonFormResponse<String> postCreateCompany(@Valid CreateCompanyForm form, BindingResult result,
            Locale locale, HttpSession session)
    {
        JsonFormResponse<String> response = new JsonFormResponse<>();
        String message;

        if (result.hasErrors())
        {
            message = getLocalizedMessage(FLASH_CREATE_COMPANY_ERROR, null, locale);
            response.setMessage(message);
            response.setErrors(result);
            response.setStatus(JsonResponseStatus.ERROR);
            return response;

        }

        try
        {
            String filename = form.getCompanyLogo().getOriginalFilename();
            Company company = getCompanyService().create(getCurrentUser(session), form);

            if (company == null) { throw new Exception("Error creating the company."); }
            User user = getCurrentUser();
            user.getCompanies().add(company);
            getUserService().update(user);
            message = getLocalizedMessage(FLASH_CREATE_COMPANY_SUCCESS, new String[]
            {
                    form.getName()
            }, locale);
            response.setMessage(message);
            response.setStatus(JsonResponseStatus.OK);
            return response;
        }
        catch (Exception ex)
        {
            LOGGER.error(ex.getMessage(), ex);

            message = getLocalizedMessage(FLASH_CREATE_COMPANY_ERROR, null, locale);
            response.setMessage(message);
            response.setErrors(result);
            response.setStatus(JsonResponseStatus.ERROR);
            return response;
        }
    }

这是我的ajax控制器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
        p:maxUploadSize="5242880" />

如您所见,我正在使用contentType:'application / x-www-form-urlencoded',我尝试使用multipart / form-data作为内容类型,但是我收到以下错误:

  

引起:org.apache.commons.fileupload.FileUploadException :.   请求被拒绝,因为没有找到多部分边界

我在servlet-context.xml中添加了多部分配置:

{{1}}

但我仍然得到那个例外。

有人知道我错过了什么吗?或者有人知道我在哪里可以找到一个上传文件作为表单一部分的例子,我找到了很多例子但是只有一个字段文件字段。我真的很感激任何关于此的建议。

0 个答案:

没有答案