2017-05-28 104 views
-2

的请求头:我需要保存一些图片,我该如何修复ByteArrayInputStream到FileInputStream?

Accept:*/* 
Accept-Encoding:gzip, deflate 
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4 
Connection:keep-alive 
Content-Length:61425 
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarysqFOqeLTqOafwiDl 
Cookie:JSESSIONID=F98C35E6649DC6997616A2CCB70A946A; save=F98C35E6649DC6997616A2CCB70A946A 
Host:192.168.0.105:8080 
Origin:http://192.168.0.105:8080 
Referer:http://192.168.0.105:8080/list 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 
X-Requested-With:XMLHttpRequest 

这是我的代码:

public boolean muilt(MultipartHttpServletRequest multiReq) throws IOException { 
     Map<String, MultipartFile> map = multiReq.getFileMap(); 
     List<String> list = new ArrayList<>(); 
     for (String in : map.keySet()) { 
      MultipartFile str = map.get(in); 
      System.out.println(str.getSize()); 
      System.out.println(str.getOriginalFilename()); 
      if (str.getSize() != 0) { 
       list.add(in + "," + url + in + ".jpg"); 
       FileOutputStream fos = new FileOutputStream(new File(url + in + ".jpg")); 
       FileInputStream fs = (FileInputStream) str.getInputStream(); 
       byte[] buffer = new byte[1024]; 
       int len; 
       while ((len = fs.read(buffer)) != -1) { 
        fos.write(buffer, 0, len); 
       } 
       fos.close(); 
       fs.close(); 
      } 
     } 
     if (list.size() < 7){ 
      return false; 
     } 
     for (int i = 0; i < 6; ++i){ 
      String[] sourceStrArray = list.get(i).split(","); 
      this.split(sourceStrArray[0], sourceStrArray[1]); 
     } 
     return true; 
    } 

错误代码:

FileInputStream fs = (FileInputStream) str.getInputStream(); 

,当它运行时,我得到的问题:

java.lang.ClassCastException:java.i o.ByteArrayInputStream不能在 controller.HanderPhoto.photoHander(HanderPhoto.java:63)在 sun.reflect.NativeMethodAccessorImpl.invoke0 浇铸到java.io.FileInputStream中在 tools.SplitPhoto.muilt(SplitPhoto.java:87) (本机方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(方法的.java:498)在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest 在 ( InvocableHandlerMethod.java:133) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) 在 org.springframework.web.servlet.mvc.method.annotation。 RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 在 org.springframework.web.servlet.mvc。方法摘要HandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 在 org.springframework.web .servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846 )

来源是一张图片,我想把它写入文件流,我该怎么办?

+0

删除此演员阵容。您可以像从FileInputStream中读取一样读取任何InputStream。 –

+0

您不需要'FileInputStream'来保存数据。你的问题没有意义。 – EJP

回答

0

MultipartFile的getInputStream()方法返回一个InputStream。你不必知道它返回的是什么类型的InputStream。正如你所看到的,它不是而是一个FileInputStream,那应该没关系。

您所需要做的就是从InputStream中读取并返回并写入您的文件。无论InputStream的具体类型是什么,您都可以用同样的方法从InputStream中读取数据。这就是多态性的全部内容。

所以,只需删除无用的强制转换,并使用InputStream而不是FileInputStream。

请注意,您可以使用Files将一个InputStream的所有内容复制到一行代码中的文件中。

相关问题