1

我的代码遇到了一些奇怪的问题。我正在使用org.apache.http.entity.mime.MultipartEntity类将文件实体提交到服务器,以便我可以上传文件。但是当我尝试添加另一个实体/参数时,它的值无法通过HttpServletRequest. 下面是我发送成功文件上传请求的客户端工作代码:

public class TestClass 
{
    public static void main(String args[]) throws ConfigurationException, ParseException, ClientProtocolException, IOException
    {
        HttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);     
        HttpPost    post   = new HttpPost("http://localhost:9090/HostImages/ImageUploaderServlet");
        MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );
        entity.addPart( "file", new FileBody(new File("D:/tempImage/cat_image.jpg") ));
        post.setEntity(entity);
        String response = EntityUtils.toString( client.execute( post ).getEntity(), "UTF-8" );
        client.getConnectionManager().shutdown();
    }
}

在服务器端,即里面ImageUploaderServlet我解析的request对象HttpServletRequest如下:

FileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); List fileItems = servletFileUpload.parseRequest(request);
它给了我通过客户端提交的文件列表,这些文件绝对可以正常工作。

当我尝试通过使用MultipartEntityHttpParams无法在服务器端获取其值来添加另一个实体时,就会出现问题。我已经完成了这个已经发布的问题,但没有帮助。(我尝试添加另一个实体,StringBody如下所示:)

entity.addPart("flag", new StringBody("true"));

我想在客户端添加一些额外的参数,以便我可以在服务器端使用它来达到我的目的。附加参数可以是 String、int 或 byte。我不知道确切的问题出在哪里,客户端还是服务器端!请帮忙。

4

1 回答 1

0

多部分请求需要特别注意。这是一个有用的链接,可以帮助理解如何处理这些情况:

在 Servlet 中解析传入的多部分/表单数据参数的便捷方法

问候

于 2013-05-06T09:17:21.903 回答