有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Upload OutputStream作为HTTP文件上载

我有一个写OutputStream的遗留应用程序,我希望将此流的内容作为文件上传到Servlet。我已经使用JMeter测试了Servlet,它使用commons-fileupload,并且工作得很好

我会使用ApacheHttpClient,但它需要一个File,而不仅仅是一个输出流。我不能在本地写入文件;如果有一些File的内存实现,那么这可能有效吗

我尝试使用HttpURLConnection(如下),但服务器的响应是“格式错误的流异常:流意外结束”

        URL url = new URL("http", "localhost", 8080, "/upload");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        String boundary = "---------------------------7d226f700d0";
        connection.setRequestProperty("Content-Disposition", "form-data; name=\"file\""); 
        connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary);
        connection.setRequestProperty("Accept", "application/json");
        connection.setRequestMethod("POST");   
        connection.setChunkedStreamingMode(0);
        connection.connect();           

        OutputStream out = connection.getOutputStream();
        byte[] boundaryBytes =("--" + boundary + "\r\n").getBytes();
        out.write(boundaryBytes);


        //App writes to outputstream here

        out.write("\r\n".getBytes());
        out.write(("--"+boundary+"--").getBytes());
        out.write("\r\n".getBytes());

        out.flush();
        out.close();
        connection.disconnect();

共 (1) 个答案

  1. # 1 楼答案

    PostMethod允许您设置RequestEntity,这是一个您可以实现的接口。您只需要适当地实现RequestEntity.writeRequest方法

    或者,如果您希望HttpClient为您处理多部分内容,您可以将MultipartRequestEntity与自定义部分一起使用