java - 将 InputStream 作为参数传递给 Web 服务

标签 java file-upload jersey

我正在尝试上传文件,但我不是通过 html 表单上传文件。无法使用 QueryParam 和 PathParam。那么谁能告诉我如何传递流。

我的 HttPClient 看起来像:

try
    {
        HttpClient httpclient = new DefaultHttpClient();
        InputStream stream=new FileInputStream(new File("C:/localstore/ankita/Desert.jpg"));
        String url="http://localhost:8080/Cloud/webresources/fileupload";
        HttpPost httppost = new HttpPost(url);
        HttpResponse response = httpclient.execute(httppost);
    }
    catch(Exception e){}

我的网络服务类看起来有点像:

@Path("/fileupload")
public class UploadFileService {

@POST
@Consumes(MediaType.APPLICATION_OCTET_STREAM)

public Response uploadFile(InputStream in) throws IOException
{     
    String uploadedFileLocation = "c://filestore/Desert.jpg" ;

    // save it
    saveToFile(in, uploadedFileLocation);

    String output = "File uploaded via Jersey based RESTFul Webservice to: " + uploadedFileLocation;

    return Response.status(200).entity(output).build();

}

// save uploaded file to new location
private void saveToFile(InputStream uploadedInputStream,String uploadedFileLocation) 
{
    try {
        OutputStream out = null;
        int read = 0;
        byte[] bytes = new byte[1024];

        out = new FileOutputStream(new File(uploadedFileLocation));
        while ((read = uploadedInputStream.read(bytes)) != -1) 
        {
            out.write(bytes, 0, read);
        }
        out.flush();
        out.close();
    } catch (IOException e) 
    {
        e.printStackTrace();
    }

}

}

有人可以帮忙吗?

 String url="http://localhost:8080/Cloud/webresources/fileupload";
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        InputStreamEntity reqEntity = new InputStreamEntity(new FileInputStream(new File("C:/localstore/ankita/Desert.jpg")), -1);
        reqEntity.setContentType("binary/octet-stream");
        reqEntity.setChunked(true); // Send in multiple parts if needed
        httppost.setEntity(reqEntity);
        HttpResponse response = httpclient.execute(httppost);   

网络服务会是什么样子?

最佳答案

你不能那样做。您无法在 HTTP 请求中传递流,因为流不可序列化。

执行此操作的方法是创建一个 HttpEntity 来包装流(例如 InputStreamEntity),然后将其附加到 HttpPOST使用setEntity 对象。然后发送 POST,客户端将从您的流中读取并将字节作为请求的“POST 数据”发送。

关于java - 将 InputStream 作为参数传递给 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16486256/

相关文章:

c# - 为什么默认 == 实现不调用 Equals?

java - 无法找到 .myeclipse.properties 文件

java - 帮助使用 Java/J2EE 上传文件

java - 使用自定义异常堆栈跟踪向客户端发送序列化异常

java - 如何在 Java 中使用 Exchange 获取邮件

c# - ASP.NET fileupload images only,在sql表中保存路径和文件名

node.js - 使用 express-fileupload 上传文件

java - Jersey 多部分表单数据默认值?

java - 匹配 REST 中的空路径参数

web-services - Tomcat,JAX-RS( Jersey ),@PathParam : how to pass two variables containing slashes