Java 我需要保存一些图片,如何通过tearrayinputstream到FileInputStream来修复?
请求标题:Java 我需要保存一些图片,如何通过tearrayinputstream到FileInputStream来修复?,java,spring-mvc,servlets,Java,Spring Mvc,Servlets,请求标题: 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=F98C35E6
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;
}
当它运行时,我发现问题:
java.lang.ClassCastException:java.io.ByteArrayInputStream不能为空
转换为java.io.FileInputStream
tools.SplitPhoto.muiltSplitPhoto.java:87 at
controller.HanderPhoto.photoHanderHanderPhoto.java:63 at
sun.reflect.NativeMethodAccessorImpl.invoke0Native方法位于
sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:62
在
sun.reflect.DelegatingMethodAccessorImpl.invokeDelegatingMethodAccessorImpl.java:43
java:498 at
org.springframework.web.method.support.InvocableHandlerMethod.doInvokeInvocableHandlerMethod.java:205
在
org.springframework.web.method.support.InvocableHandlerMethod.InvokeForRequestInInvocableHandlerMethod.java:133
在
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandleServletInvocableHandlerMethod.java:97
在
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethodRequestMappingHandlerAdapter.java:827
在
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternalRequestMappingHandlerAdapter.java:738
在
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handleAbstractHandlerMethodAdapter.java:85
在
org.springframework.web.servlet.DispatcherServlet.doDispatcherservlet.java:963
在
org.springframework.web.servlet.DispatcherServlet.doServiceDispatcherServlet.java:897
在
org.springframework.web.servlet.FrameworkServlet.processRequestFrameworkServlet.java:970
在
org.springframework.web.servlet.FrameworkServlet.doPostFrameworkServlet.java:872
在javax.servlet.http.HttpServlet.serviceHttpServlet.java:648 at
org.springframework.web.servlet.FrameworkServlet.serviceFrameworkServlet.java:846
源是一张图片,我想把它的流写入文件,我该怎么做?MultipartFile的方法返回一个InputStream。您不必知道它返回什么类型的输入流。正如您所看到的,它不是FileInputStream,这不重要
您所需要做的就是从返回的InputStream中读取并写入文件。无论InputStream的具体类型是什么,您都可以以相同的方式读取InputStream。这就是多态性的意义所在
所以,只需删除无用的强制转换,并使用InputSTream而不是FileInputStream
请注意,您可以使用。删除此强制转换,将InputStream的所有内容复制到一行代码中的文件中。您从任何InputStream读取数据的方式与从FileInputStream读取数据的方式相同。您不需要FileInputStream来保存数据。你的问题没有道理。
FileInputStream fs = (FileInputStream) str.getInputStream();