javascript - Ajax 请求正确循环,但未发送到服务器以获取多个文件。数组中只保存一个文件

标签 javascript java jquery ajax serverside-javascript

我有一个 ajax 请求正在运行,因为我可以看到文件数量、文件名和循环。我正在尝试将这些保存到我的计算机上的本地文件夹中。我有一个用于两个变量的@RequestParam,一个数字(字符串)和文件(一个数组)。它似乎适用于一个文件,但不保存下一个文件。谁能找出原因吗?

    function makeProgress(number){   
      var url = getRelativeURL("web/fileUpload");        
      var formData = new FormData();
      formData.append('number', number);
      fls = document.getElementById("attachmentFileUploadInput").files; //number of files... 
      console.log(fls);
      for(j=0;j<fls.length;j++){
          formData.append('files[]', fls[j]);  //note files[] not files
          $.ajax({
              url : url,
              data : formData,
              processData : false,
              contentType: false,
              type : 'POST',
              success : function(data) {
               FileUploadVisible(true);
               $('#attachmentModal').modal('hide')
               $(':input','#attachmentModal').val("");
                $("#pbarmain").hide();
                $("#pbar").hide();
                $("#actionPlanDiv").hide();
                setObjectEnabled('#Upload',false);
              },
              error : function(err) {
                  FileUploadErrorVisible(true);
              }
         });
          console.log('loop each file working');
      }
      console.log("form data " + formData);


        }

服务器端 - 这是出现问题的地方,仅将第一个文件保存在文件夹中:

private static String UPLOADED_FOLDER = "C://temp//";

@RequestMapping(value = { "/fileUpload" }, method = RequestMethod.POST)
@ResponseBody
public String uploadFile( @RequestParam("number") String number, @RequestParam("files[]") MultipartFile[] files, MultipartHttpServletRequest req, HttpServletResponse res)
{       

    for (MultipartFile file : files) {
    try {
        File directory = new File(UPLOADED_FOLDER + number);
                if (! directory.exists()){
                    directory.mkdir();
                  }
            byte[] bytes = file.getBytes();
            Path path = Paths.get(UPLOADED_FOLDER + number + "//" + file.getOriginalFilename());
            Files.write(path, bytes);
            logger.info("You have successfully uploaded '" + file.getOriginalFilename() + "'");
            return("File Uploaded");


    } catch (Exception e) {
        res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        logger.error("Failed to upload file '" + file.getOriginalFilename() + "'", e);
        return("File Not Uploaded");
    }
}
    return "redirect:/fileUpload";
}

}

最佳答案

return("文件已上传");这打破了循环。 如果您希望循环完全运行,则需要在循环结束后放置 return。

关于javascript - Ajax 请求正确循环,但未发送到服务器以获取多个文件。数组中只保存一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400616/

相关文章:

javascript - 每个异步调用的特定任务并 promise 等待所有

javascript - 在 Cytoscape js 中使节点不可点击。

java - 如何在不知道数据模式的情况下将数据从文本文件加载到 spark 数据框中?

javascript - 使用动态 id 更新按钮的 CSS

javascript - 在 Chrome 扩展程序的弹出文件中加载 YouTube 视频时出错?

javascript - rails |使用 js 进行延迟作业 dom 操作后

javascript - 如何创建时间表并将每个输入值与相应的日期联系起来?

java - 用于kafka实现的python vs java

Java AWT : Remove frame title bar and add customised title Bar

javascript - jqGrid 选择事件单元格中的文本