2017-03-26 80 views
0

我想上传文件并将文件名保存到数据库。我添加了CommonsMultipartResolver依赖项,并在我的Spring配置中定义了CommonsMultipartResolver bean。尽我所能,但我仍然遇到java.io.FileNotFoundException错误。如何解决java.io.FileNotFoundException与jQuery文件上传和春季启动

错误

java.io.FileNotFoundException: /private/var/folders/0q/_ll9y13s5rn7cym4_9l6lb0c0000gn/T/tomcat.2486137170479409904.8080/work/Tomcat/localhost/ROOT/upload_2793f497_312d_401f_91e7_d2bc29ddfec6_00000001.tmp (No such file or directory) 
at java.io.FileInputStream.open0(Native Method) ~[na:1.8.0_65] 
at java.io.FileInputStream.open(FileInputStream.java:195) ~[na:1.8.0_65] 
at java.io.FileInputStream.<init>(FileInputStream.java:138) ~[na:1.8.0_65] 
at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.getInputStream(DiskFileItem.java:188) ~[tomcat-embed-core-8.5.11.jar:8.5.11] 
at org.apache.catalina.core.ApplicationPart.getInputStream(ApplicationPart.java:100) ~[tomcat-embed-core-8.5.11.jar:8.5.11] 
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.getBytes(StandardMultipartHttpServletRequest.java:291) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_65] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_65] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65] 
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65] 
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:664) ~[jackson-databind-2.8.7.jar:2.8.7] 
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.7.jar:2.8.7] 
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.7.jar:2.8.7] 
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.7.jar:2.8.7] 
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.7.jar:2.8.7] 
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.7.jar:2.8.7] 
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:149) ~[jackson-databind-2.8.7.jar:2.8.7] 
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:112) ~[jackson-databind-2.8.7.jar:2.8.7] 

配置

@Bean 
    public MultipartResolver multipartResolver() 
    { 
     return new StandardServletMultipartResolver(); 
    } 

    @Bean 
    public MultipartResolver multipartResolver2() { 
     return new CommonsMultipartResolver(); 
    } 

控制器

@PostMapping(value = "/uploadFile") 
    @ResponseBody 
    public ResponseEntity<Object> uploadFile(@RequestParam("uploadfile") MultipartFile uploadfile, Picture picture, Principal principal) { 
     User user = (User) ((UsernamePasswordAuthenticationToken) principal).getPrincipal(); 
     picture.setUser(user); 
     try { 
      // Crop the image (uploadfile is an object of type MultipartFile) 
      BufferedImage croppedImage = cropImageSquare(uploadfile.getBytes()); 

      // Get the filename and build the local file path 
      String filename = uploadfile.getOriginalFilename(); 
      String directory = "/Users/molayodecker/Sites/admissionsPortal/data"; 
      String filepath = Paths.get(directory, filename).toString(); 
      String ext = FilenameUtils.getExtension(filename); 

      // Save the file locally 
      File outPutFile = new File(filepath); 
      ImageIO.write(croppedImage, ext, outPutFile); 
      //stream.write(uploadfile.getBytes()); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
      return new ResponseEntity<>(HttpStatus.BAD_REQUEST); 
     } 
     pictureService.save(picture, uploadfile); 
     return new ResponseEntity<>(HttpStatus.ACCEPTED); 
    } // method uploadFile 

表格

<form id="upload-file-input" th:action="@{/uploadFile}" method="post" th:object="${picture}" 
enctype="multipart/form-data" class="form-inline inline new-item"> 
<input type="file" id="file" name="uploadfile" /> 
<span class="placeholder" data-placeholder="Choose an image...">Choose an image...</span> 
<label for="file" class="button">Browse</label> 
<button type="submit" class="btn btn-primary">Upload</button> 
</form> 

JS文件

var $formUploader = $("#upload-file-input"); 
    $formUploader.on("submit", function(e){ 
    e.preventDefault(); 
    //var data = new FormData(this); 
    var data={}; 
    $.each($(this).serializeArray(), function(i, field){ 
    data[field.name] = field.value; 
    }); 
    $.ajax({ 
      //dataType: 'json', 
      url: $formUploader.prop('action'), 
      type: "POST", 
      //data: new FormData($("#upload-file-input")[0]), 
      data: data, 
      enctype: 'multipart/form-data', 
      processData: false, 
      contentType: false, 
      cache: false, 
      success: function (data) { 
      // Handle upload success 
      $("#upload-file-message").text("File succesfully uploaded"); 
      }, 
      error: function() { 
      // Handle upload error 
      $("#upload-file-message").text("File not uploaded (File might be big, size needed.)"); 
      } 
     }); 
}); 

回答

0

我认为您的Spring应用程序中的CSRF保护已启用。 你应该添加_csrf_header,_csrf您的Ajax请求 如:

var header = $("meta[name='_csrf_header']").attr("content"); 
var token = $("meta[name='_csrf']").attr("content"); 
$.ajax({ 
    url: '/test', 
    type: 'POST', 
    beforeSend: function(xhr){ 
     xhr.setRequestHeader(header, token); 
    }, 
    success: function(data) { 
     ----- 
    } 
} 

您还可以禁用CSRF _csrf_header - >

@Configuration 
public class App extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable(); 
    } 
} 
+0

我得到一个错误'无法读取undefined'的特性 'toLowerCase'我不知道为什么 – ADecker

+0

它的工作,但现在我得到一个java.io.FileNotFoundException错误 – ADecker

+0

请添加完整的堆栈跟踪 –