使用 Spring mvc 和 MockMVC 上传文件

2024-05-04

我已成功将图像文件上传到WebContent\resources\uploads\image.jsp。但我在使用 MockMvc 进行测试时遇到了问题。当我运行测试用例时,我遇到了异常文件未找到 and 拒绝访问.

控制器看起来像这样:

@RequestMapping(value="/AddContacts", method=RequestMethod.POST)
    public @ResponseBody String addContacts(ContactBean cb,HttpServletRequest request,HttpServletResponse response,@RequestParam("upload") MultipartFile file) throws IllegalStateException, IOException 
    {

        String error=cb.validate();
        if(error.equals("")){
            Model m=new Model();
            String ret=m.addData(cb);
            System.out.println("Contact Bean: "+cb);
            if(ret.equals("DBFAIL")){
                response.setStatus(500);
            }
            else if(ret.equals("EXIST")){
                response.setStatus(409);
            }
            else{
                response.setStatus(200);
                /* to upload a file */
                if(file != null && file.getSize() > 0){
                    System.out.println("File name: "+file.getOriginalFilename());
                    String dir="C:\\web_latest\\Admin_FileUpload_29_01_15\\WebContent\\resources\\uploads\\"+cb.getName()+"_"+cb.getId()+"\\";
                    //String dir="C:\\Upload\\"+cb.getName()+"_"+cb.getId()+"\\";
                    File directory = new File(dir);
                    if (directory.exists()) {
                        System.out.println("Directory already exists ...");

                    } 
                    else {
                        System.out.println("Directory not exists, creating now");
                        boolean success = directory.mkdir();
                        if (success) {
                            System.out.printf("Successfully created new directory : %s%n", dir);
                        } 
                        else {
                            System.out.printf("Failed to create new directory: %s%n", dir);
                        }
                    }
                    String fileName = file.getOriginalFilename();
                    file.transferTo(new File(dir+fileName));
                }
            }
            return error;
        }
        else{
            //response.setStatus(500);
            return error;
        }

    }

我的测试用例是这样的:

public void testAddContacts() throws Exception {
    FileInputStream fis=new FileInputStream("C:\\Users\\Public\\Pictures\\Sample Pictures\\Penguins.jpg");
    //MockMultipartFile upload = new MockMultipartFile("upload", "Penguins.jpg", "image/jpeg", "C:\\Users\\Public\\Pictures\\Sample Pictures\\Penguins.jpg\\".getBytes());

    MockMultipartFile upload= new MockMultipartFile("upload",fis);
    MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
      mockMvc.perform(MockMvcRequestBuilders.fileUpload("/AddContacts")
              .file(upload)
              .param("some-random", "4")
              .param("name","deerdad")
              .param("email","[email protected] /cdn-cgi/l/email-protection")
              .param("phone", "1234567890"))
          .andExpect(status().is(200));
}

我的jsp文件是这样的:

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    <link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/resources/css/form.css">
    <script type="text/javascript" src="${pageContext.servletContext.contextPath}/resources/js/jquery-1.11.1.js"></script>

        <script>


        function doAdd() {
        // get the form values
        var name = $('#name').val();
        var email = $('#email').val();
        var phone = $('#phone').val();

        var file = document.getElementById("uploadfile");
        var formData = new FormData();
        formData.append("upload", file.files[0]);
        formData.append("name",$('#name').val());
        formData.append("email",$('#email').val());
        formData.append("phone",$('#phone').val());


        $.ajax({
            type: "POST",
            url: "AddContacts",
            data: formData,
            processData: false,
            contentType: false,
            success: function(response){
                       $("#error").text("");
                       if(response==""){
                           $("#info").text("successfully added");
                           $('#myTable').append("<tr><td><input type='checkbox' name='cb' value='"+ response+"'><td>"+name + "</td><td>"+email + "</td><td>"+phone + "</td></tr>");
                           $("#addForm").hide();
                       }
                       else{
                           $("#info").text(response);
                       }
                  },
            error: function(){
                $("#info").text("");
                $("#error").text("Internal server error");
            },    
            statusCode: {
                        409: function(response,statusText) {
                            $("#info").text("");
                            $("#error").text("Name already exists ["+response.statusText+"]");
                        },
                        500: function(response,statusText) {
                            $("#info").text("");
                            $("#error").text("database problem ["+response.statusText+"]");
                        }
                      }
        });
        }
        </script>

    </head>
    <body bgcolor="FFFFCC">
        <center>
            <form:form action="" method="post" name="addForm" id="ufile" modelAttribute="upload" class="dark-matter">
                <h1>
                    Add Contacts <span>Please fill all the texts in the fields</span>
                </h1>
                <p>
                    <label> 
                        <input id="id" type="hidden">
                    </label> 
                    <label> 
                        <span>Your Name</span> 
                        <input id="name" type="text" name="name" placeholder="Your Full Name">
                    </label> 
                    <label> 
                        <span>Your Email</span> 
                        <input id="email" type="text" name="email" placeholder="Your Email">
                    </label> 
                    <label> 
                        <span>Your Phone</span> 
                        <input id="phone" type="text" name="phone" placeholder="Your phone">
                    </label>
                    <label>
                        <span>Upload Photo</span>
                        <input type="file" id="uploadfile" accept="image/*" name="uploadfile">              
                    </label>
                    <label> 
                        <span>&nbsp;</span> 
                        <input type="button" class="button"  id="btn" value="Add Me" onclick="doAdd()">
                    </label>
                </p>
            </form:form>
            <!--
            <div STYLE="color: #FF3333; background-color: #8888ff; width: 100px; border-radius: 10px; cursor: pointer;" id="sub">
                Add Me
            </div>
            -->
            <!--
            <input type="hidden" id="id" >
                <br/>
                Name : <input type="text" id="name"><br/><br/>
                Email : <input type="text" id="email"><br/><br/>
                Phone : <input type="text" id="phone"><br/><br/>
            <input type="button" value="Add Me" onclick="doAdd()">
            <br/>
            -->
        </center>
    </body>
</html>

public void testAddContacts() throws Exception{
            File f = new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Penguins.jpg");
            System.out.println(f.isFile()+"  "+f.getName()+f.exists());
            FileInputStream fi1 = new FileInputStream(f);
            FileInputStream fi2 = new FileInputStream(new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Tulips.jpg"));
            MockMultipartFile fstmp = new MockMultipartFile("upload", f.getName(), "multipart/form-data",fi1);
            MockMultipartFile secmp = new MockMultipartFile("upload", "Tulips.jpg","multipart/form-data",fi2); 
            MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
            mockMvc.perform(MockMvcRequestBuilders.fileUpload("/AddContacts")                
                    .file(fstmp)
                    .file(secmp)
                    .param("name","abc").param("email","[email protected] /cdn-cgi/l/email-protection").param("phone", "1234567890"))               
                    .andExpect(status().isOk());
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Spring mvc 和 MockMVC 上传文件 的相关文章

  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 使用Spring将war文件WEB-INF目录下的资源导入到applicationContext文件中

    我在我的项目中使用 Spring 框架 我想导入下面的所有 xml 资源 文件 WEB INF CustomerService spring integration Jobs applicationContext配置文件中war文件的目录
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐