【问题标题】:How to pass java Inputstream to Javascript如何将java Inputstream传递给Javascript
【发布时间】:2017-04-28 04:48:14
【问题描述】:

我正在使用 jquerymobile 和 Spring MVC 开发应用程序。我在控制器中以 Inputstream 的形式获取图像,下一步是将此图像传递给 Javascript,以便在与 JqueryMobile 的对话框中显示。

如何将这个 java Inpustream 图像传递给 javascript?

附言。控制器通过 jquerymobile ajax 调用,所以我有 onSuccess 方法等待使用控制器返回的数据进行操作。

【问题讨论】:

  • 在我看来你需要提取原始字节......然后,看看this,它可能会有所帮助
  • 为什么需要使用ajax传递图片?为什么不使用常规请求 -> 使用所有动态参数创建图像 url。例如 test.com/getImage/id13.png (getImage.png?id=13)
  • ,谢谢我去看看。 Zvezdochet,我正在使用 ajax 调用的 jquerydialog 中弹出这个检索图像

标签: java javascript jquery-mobile


【解决方案1】:

为什么不在 div 上使用 Jquery 从 java 加载该图像?

var url = 'myimage.com/image_java_url?'+dataToSend
$('#myDiv').load(url, function(response, status, xhr) {
    if (status = "success"){
        $('#myDiv').html(response);
    }
});

【讨论】:

  • 如果我在 URL 中获取图像但我在输入流中有它,那将是一个选项
【解决方案2】:

我假设您正在创建一个 REST 端点来接收图像。如果是这样,您可以让您的 Spring-endpoint 将 HttpServletResponse 作为参数并将图像流式传输到 servlet 输出流。 将输入流包装在 BufferedInputStream 中,让它为您处理缓冲。

要获取 HttpServletResponse,只需将其作为参数添加到您的方法中,

@RequestMapping(value = "/something")
public void helloWorld(HttpServletResponse response)  {
    InputStream imageStream = .....;

    OutputStream oSteam = response.getOutputStream();
    InputStream stream = new BufferedInputStream(imageStream ); 
    int b = -1;
    while((b = stream.read())> -1){
        oSteam.write(b);
    }

【讨论】:

  • Thomas,这只是我现在正在做的,但没有成功的结果。谢谢:)
【解决方案3】:

我对 Spring 没有太多经验,但我会在 Java EE 中使用 javax.ws.rs.core.Reponse 类。这将允许您使用 Response.ResponseBuilder 构造一个 http 响应,包装您的 InputStream

Response.ok(inputStream, MEDIA_TYPE.APPLICATION_OCTET_STREAM).build();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2017-03-07
    • 2012-06-12
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多