当前位置: 首页 > 知识库问答 >
问题:

使用spring窗体在spring mvc中上载文件不起作用

柳杰
2023-03-14

我有一个jsp页面,其中我使用了Spring表单标签,这样我就可以使用模型属性并将数据绑定到它。它在提交表单时工作正常,但在添加enctype="multipart/form-data"模型属性后,控制器将恢复为空。这里有什么问题?我的代码是-proflie.jsp

 <sf:form method="POST" action="update" modelAttribute="user" class="form-horizontal" >
    <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">Avatar</label>
        <div class="col-md-6">
            <div class="media v-middle">
                <div class="media-left">
                    <div class="icon-block width-100 bg-grey-100">
                        <i class="fa fa-photo text-light"></i>
                    </div>
                </div>
                <div class="media-body">
                    <i class="fa fa-upl"><sf:input path="imageFile" type="file" class="btn btn-white btn-sm paper-shadow relative" placeholder="Add Image" id="imageFile" />
                     </i>
                </div>
            </div>
        </div>
    </div>
    <div class="form-group">
        <label for="inputEmail3" class="col-md-2 control-label">Full Name</label>
        <div class="col-md-8">
            <div class="row">
                <div class="col-md-6">
                    <div class="form-control-material">
                        <sf:input path="firstName" type="text" class="form-control" id="firstName" placeholder="Your first name" value="${user.firstName}" />
                        <sf:input path="id" type="hidden" class="form-control" id="id" value="${user.id}" />
                        <label for="firstName">First name</label>
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-control-material">
                            <sf:input path="lastName" class="form-control" id="lastName" placeholder="Your last name" value="${user.lastName}" />
                        <label for="lastName">Last name</label>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="form-group">
        <label for="inputEmail3" class="col-md-2 control-label">Email</label>
        <div class="col-md-6">
            <div class="form-control-material">
                <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
                    <sf:input path="email" type="email" class="form-control" id="inputEmail3" placeholder="Email" value="${user.email}" />
                    <label for="inputEmail3">Email address</label>
                </div>
            </div>
        </div>
    </div>
     <div class="form-group">
        <label for="inputEmail3" class="col-md-2 control-label">Phone</label>
        <div class="col-md-6">
            <div class="form-control-material">
                <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
                    <sf:input path="phone" type="number" class="form-control" id="inputEmail3" placeholder="Phone" value="${user.phone}" />
                    <label for="phone">Phone</label>
                </div>
            </div>
        </div>
    </div>
    <div class="form-group">
        <label for="inputEmail3" class="col-md-2 control-label">Address</label>
        <div class="col-md-6">
            <div class="form-control-material">
                <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-link"></i></span>
                    <sf:input path="address" type="text" class="form-control used" id="website" placeholder="Address" value="${user.address}" />
                    <label for="address">Address</label>
                </div>
            </div>
        </div>
    </div>
    <div class="form-group">
        <label for="inputPassword3" class="col-md-2 control-label">Change Password</label>
        <div class="col-md-6">
            <div class="form-control-material">
               <sf:input path="password" type="password" class="form-control" id="inputPassword3" placeholder="Password" value="${user.password}" />
                <label for="password">Password</label>
            </div>
        </div>
    </div>

    <div class="form-group margin-none">
        <div class="col-md-offset-2 col-md-10">
            <button type="submit" class="btn btn-primary paper-shadow relative" data-z="0.5" data-hover-z="1" data-animated>Save Changes</button>
        </div>
    </div>
</sf:form>

AccountController类

package com.vc.teacher.controller;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.vc.teacher.db.dao.UserDao;
import com.vc.teacher.entities.User;
import com.vc.teacher.util.Constants;

@Controller
public class AccountController {

    @Autowired
    UserDao userDao;

    @RequestMapping("/login")
    public String loginUser(@RequestParam("email") String email,
            @RequestParam("password") String password, Model model) {

        User user = userDao.checkCreditionals(email, password);
        if (user != null) {
            model.addAttribute("user", user);
            return "jsp/profile";
        } else {
            model.addAttribute("error", "Wrong creditionals");
            return "jsp/signin";
        }

    }

    @RequestMapping("/signUp")
    public String initilize(Model model) {
        model.addAttribute(new User());
        return "jsp/signup";
    }

    @RequestMapping(method = RequestMethod.POST, value = "/register")
    public String signUpUser(User user, RedirectAttributes attributes) {
        boolean result = false;
        File imageFile = null;

        try {
            imageFile = user.getImageFile();

            if (imageFile != null) {
                File imageFileSave = new File(Constants.MEDIA_FILE_PATH);
                FileUtils.copyFile(imageFile, imageFileSave);
                user.setImageFileName(imageFile.getName());
            }

            user.setStatus("Deactive");
            result = userDao.registerUser(user);

            if (result == true) {
                attributes.addFlashAttribute("message",
                        "You are ready to go now !");
                return "redirect:/signUp";
            } else {
                attributes.addFlashAttribute("message", "Something went wrong");
                return "redirect:/signUp";
            }

        } catch (Exception e) {
            attributes.addFlashAttribute("message", "Something went wrong");
            return "redirect:/signUp";
        }

    }

    @RequestMapping(method = RequestMethod.POST, value = "/update")
    public String updateUser(User user, RedirectAttributes attributes) {
        boolean result = false;
        File imageFile = null;

        try {
            System.out.println("=================================="+user.getEmail());
            System.out.println("=================================="+user.getId());
            System.out.println("=================================="+user.getFirstName());

            imageFile = user.getImageFile();

            if (imageFile != null) {
                File imageFileSave = new File(Constants.MEDIA_FILE_PATH);
                FileUtils.copyFile(imageFile, imageFileSave);
                user.setImageFileName(imageFile.getName());
            }

            user.setStatus("Active");
            result = userDao.updateUser(user);

            if (result == true) {
                attributes.addFlashAttribute("message", "Profile Updated !");
                return "jsp/profile";
            } else {
                attributes.addFlashAttribute("message", "Something went wrong");
                return "jsp/profile";
            }
        } catch (Exception e) {
            attributes.addFlashAttribute("message", "Something went wrong");
            return "jsp/profile";
        }

    }
}

共有1个答案

高和通
2023-03-14

DispatcherServlet本身不知道如何处理多部分表单数据;这就是为什么我们需要多部分解析器。

您应该在servlet配置中注册它:

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

使用CommonMultipartFile或MultipartFile代替用户对象中的文件:

private CommonsMultipartFile imageFile;

您可以尝试以下代码来保存文件:

File imageFileSave = new File(Constants.MEDIA_FILE_PATH);
FileUtils.writeByteArrayToFile(imageFileSave , imageFile.getBytes());
 类似资料:
  • 这个问题非常类似于如何使用使用PHPJavaHttpClient库上传文件,但是即使是也不能正确上传文件。这里是客户端的MWE: HELLO WORLD'。 下面是的样子: 输出如下所示,这似乎意味着文件内容被发送到和,而不是 我的猜测是,我在客户端代码中做了一些愚蠢的事情,但我不确定这是什么。

  • 我遇到了一个问题,从带有angular2的Spring boot加载文件。 这是我在spring boot的代码,它来自:使用spring MVC返回生成的pdf。我可以用postman直接下载文件,但不能用angular2... Angular2服务 和下载按钮 当我点击下载按钮chrome打开新标签并立即关闭它不显示任何文件。以下是Postman的一些响应标题。

  • 我正在使用spring boot开发一个web-app,并在下面给出的application.properties文件中添加了上下文路径,但当我运行应用程序时,它不使用上下文路径。 “我在application.properties文件中添加了#context Path server.port=8085 server.servlet.context-path=/nvs-councellor” “当

  • 我实现了spring Security3.2.5,但不幸的是@preauthorize不能用于类和方法。正如我从文档中读到的,@preauthorize应该允许方法和类工作,如果用户在注释中有指定的角色,但我能够运行所有方法或类,而没有任何角色差异。您可以看到security-config.xml和security.context.xml以及我在下面声明@preauthorize注释的类。如果你能

  • 问题内容: 我正在用Java开发游戏,我想将随机生成的地图保存在图像上,然后加载它。我的代码在Eclipse中工作正常,但是当我将其导出到.jar / .exe文件时,它在制作文件(“ mapf”)时会遇到问题。谢谢您的回答。 堆栈跟踪: 问题答案: 您似乎认为您可以将jar视为目录结构,事实并非如此。您甚至都不应该 考虑 将代码从中运行到jar文件中(可能的话,但是会涉及 很多 陷阱)。 假设您

  • 问题内容: Java控制器类: html文件: 角js: 这是我在服务器日志中无法理解的错误: 问题答案: 尝试以下方法。对我来说很好。 HTML你应该有 注意输入的名称。 然后在JS控制器方法中 现在在您的Java Controller类中 希望这对您有用。并且也要进行异常处理。