我正在使用jetty服务器,我一直在尝试读取作为表单附加到我收到的POST请求的图像。我尝试了一些模式,但我总是有例外。
//Process POST requests to upload images
private void handleImage(String target, Request baseRequest, HttpServletRequest request,
HttpServletResponse response) throws Exception{
//Get image
byte[] pictureInByte = (request.getParameter("image")).getBytes();
InputStream in = new ByteArrayInputStream(pictureInByte);
BufferedImage bImageFromConvert = ImageIO.read(in);
//Save to disk
ImageIO.write(bImageFromConvert, "jpeg", new File(
"new-darksouls.jpg"));
}
这就是POST的创建方式(这是在iPhone上使用Obj-C)。我在Jetty服务器上收到了请求,但无法读取它。
//Set http client defaults
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:AS_NET_BASE_URL]];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[httpClient setDefaultHeader:@"Accept" value:@"application/json"];
[httpClient setParameterEncoding:AFJSONParameterEncoding];
[httpClient defaultValueForHeader:@"Accept"];
//init http request
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:route parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
//Append data (JSON)
[formData appendPartWithFileData:image
name:@"image"
fileName:@"2"
mimeType:@"image/jpeg"];
}];
//Time out
[request setTimeoutInterval:AS_MI_NET_TIMEOUT_INTERVAL];
//Init operation
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];
//Set completion blocks
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//Stop indicator
[self stopNetworkIndicator];
completion(YES, responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[self stopNetworkIndicator];
NSLog(@"%@", error);
completion(NO, NULL);
}];
//Start spinning
[self startNetworkIndicator];
//Send request
[operation start];
//No internet, finish method
}else{
completion(NO, NULL);
}
答案 0 :(得分:1)
AFMultipartFormData
班级会创建multipart request。
我不认为Jetty支持Servlet 3.0规范(可以让你使用request.getParts()
),但你可以使用第三方库(Spring / Apache commons)来解析多部分请求。
搜索“apache commons fileupload multipart”应该找到一些例子。
如果您使用的是Spring,请查看http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch16s08.html