我想在 Apache wink 中使用 REST 服务上传文件。
我正在使用 HTTP 客户端。
org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(RestResource.class);
return classes;
}
};
clientConfig.applications(app);
org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
org.apache.wink.client.Resource resourceCreateProductImage = client.resource("http://restResource/uploadProductImage");
File file = new File("/home/aspire17/Pictures/Product.png") ;
String fileName = file.getName();
MultipartEntity multiPartEntity = new MultipartEntity();
multiPartEntity.addPart("fileName", new StringBody(fileName != null ? fileName : file.getName())) ;
FileBody fileBody = new FileBody(file, "application/octect-stream") ;
multiPartEntity.addPart("attachment", fileBody) ;
ClientResponse responseCreateProductImage = resourceCreateProductImage
.contentType("multipart/form-data").accept("*/*").post("");
我的 apache 眨眼休息服务就像,
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/uploadProductImage")
public JSONObject uploadProductImage(BufferedInMultiPart bimp)
throws IOException, JSONException {
OutputStream out = null ;
Random rand = new Random();
List parts = bimp.getParts();
Debug.logInfo("parts size : " + parts.size(), module);
Iterator it = parts.iterator();
byte[] bytes = null;
while(it.hasNext()){
InPart name = (InPart) it.next();
try{
InputStream inputStream= name.getInputStream();
out = new FileOutputStream("/home/aspire17/Pictures/Product.png");
int read=0;
bytes = new byte[1024];
while((read = inputStream.read(bytes))!= -1){
out.write(bytes, 0, read);
}
inputStream.close();
out.flush();
out.close();
}
catch (IOException e){
}
}
}
我不知道,如何在 Rest 服务中获取文件
现在,当我运行此服务时,我遇到了异常
[java] 2013-05-29 18:59:14,784 (http-bio-0.0.0.0-8080-exec-2)[StandardWrapperValve.java:269:ERROR] Servlet.service() for servlet [restServlet] 在上下文中路径 [/restAPI] 在 org.apache.wink.common.internal.providers.multipart.MultiPartParser 的 java.lang.System.arraycopy(Native Method) [java] 处抛出异常 [java] java.lang.ArrayIndexOutOfBoundsException [java]。 shiftBuff(MultiPartParser.java:80) [java] 在 org.apache.wink.common.internal.providers.multipart.MultiPartParser.fetch(MultiPartParser.java:201) [java] 在 org.apache.wink.common.internal。 providers.multipart.MultiPartParser.verifyByteReadyForRead(MultiPartParser.java:183) [java] 在 org.apache.wink.common.internal.providers.multipart.MultiPartParser.digestBoundary(MultiPartParser.java:144) [java] 在 org.apache。 wink.com。internal.providers.multipart.MultiPartParser.nextPart(MultiPartParser.java:105) [java] 在 org.apache.wink.common.model.multipart.InMultiPart.hasNext(InMultiPart.java:83) [java] 在 org.apache。 wink.common.model.multipart.BufferedInMultiPart.(BufferedInMultiPart.java:50) [java] at org.apache.wink.common.internal.providers.multipart.BufferedInMultiPartProvider.readFrom(BufferedInMultiPartProvider.java:62) [java] at org .apache.wink.common.internal.providers.multipart.BufferedInMultiPartProvider.readFrom(BufferedInMultiPartProvider.java:39) [java] at org.apache.wink.server.internal.registry.ServerInjectableFactory$EntityParam.getValue(ServerInjectableFactory.java:200 ) [java] 在 org.apache.wink.common.internal.registry.InjectableFactory.instantiate(InjectableFactory.java:68) [java] 在 org.apache.wink.server.internal.handlers.CreateInvocationParametersHandler.handleRequest(CreateInvocationParametersHandler.java:44) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) [java] 在 org. apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) [java] 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:63) [java] 在 org.apache。 wink.server.internal.handlers.FindResourceMethodHandler.handleSubResourceMethod(FindResourceMethodHandler.java:183) [java] at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:110) [java] at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:110) [java] apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) [java] 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:63) [java] 在 org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:95) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) [java] 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:63) [java ] 在 org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler.java:53) [java] 在 org.apache.wink.server.handlers。RequestHandlersChain.handle(RequestHandlersChain.java:26) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) [java] 在 org.apache.wink.server.handlers.AbstractHandlersChain。 doChain(AbstractHandlersChain.java:63) [java] 在 org.apache.wink.server.internal.handlers.OptionsMethodHandler.handleRequest(OptionsMethodHandler.java:46) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain。 handle(RequestHandlersChain.java:26) [java] at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) [java] at org.apache.wink.server.handlers.AbstractHandlersChain.doChain( AbstractHandlersChain.java:63) [java] 在 org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest(SearchResultHandler.java:33) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) [java] 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:63) [java] 在 org.apache.wink.server.internal.log.ResourceInvocation.handleRequest(ResourceInvocation.java:92) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) [java] 在 org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) [java ] 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:63) [java] 在 org.apache.wink.server.internal.log.Requests。handleRequest(Requests.java:76) [java] at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) [java] at org.apache.wink.server.handlers.RequestHandlersChain.handle( RequestHandlersChain.java:22) [java] 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:63) [java] 在 org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain. java:48) [java] 在 org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:207) [java] 在 org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java: 154) [java] 在 org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:119) [java] 在 javax.servlet.http.HttpServlet。服务(HttpServlet.java:722)[java] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) [java] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 210) [java] 在 org.ofbiz.webapp.control.ContextFilter.doFilter(ContextFilter.java:337) [java] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [java] 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [java] 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) [java] 在 org.apache.catalina。 core.StandardContextValve.invoke(StandardContextValve.java:123) [java] 在 org.apache.catalina.authenticator.AuthenticatorBase。调用(AuthenticatorBase.java:472)[java] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)[java] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 99) [java] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [java] 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) [java] 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) [java] 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) [java] 在 org.apache.coyote。 AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) [java] at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:第312章java.lang.Thread.run(Thread.java:619)