【问题标题】:Serve files in img src using HTTP.get使用 HTTP.get 在 img src 中提供文件
【发布时间】:2015-07-08 11:01:07
【问题描述】:

只有在我将 x-authentication 令牌添加到“GET”http 请求的标头(并且我不想使用 cookie)时,才能提供我的文件。直接的后果是我不能仅仅通过在 html 中使用它的 URL 来调用文件,我需要从 JavaScript 调用中获取它,最好是异步的。

由于我的客户端是 Meteor,所以我想使用 HTTP.get 方法。我得到了通过 http.get 获取文件的部分,但不是我将其附加到的部分,例如图像的 src 属性。

如果我想在我的页面中使用它,我应该如何返回我的文件下载结果? (例如,将其附加到图像的 src 属性)。我应该使用专用模板还是可以使用助手来实现?

编辑:我取得了一些进展。根据对类似案例“how to display images downloaded using XMLHttpRequest”的回答,我看到您可以在 base64 中对响应内容文本进行编码。

所以这是我的想法: 我使用助手返回 img src 属性。我知道当我在客户端使用 http 调用时它是异步的,所以我默认返回一个占位符值(见最后一行)

这是我的代码(在 img src 属性中调用了助手):

    link : function(){

    HTTP.get ("http://localhost:3000" + Files.baseURL + "/" + this.md5,
    {
        headers:{
            "X-Auth-Token": Accounts._storedLoginToken()
        }
        },
        function (error, result) {
            if (error){
                console.log ("an error " + result.statusCode + " occured");
            }
            else
            {
                retval ="";
                        for (var i=0; i<=result.content.length-1; i++)
                        retval += String.fromCharCode(result.content.charCodeAt(i) & 0xff);
                return "data:"+this.contentType+";base64," + encode64(retval)
            }
        })
    return "http://localhost:3000/images/placeholder.png"
    },

此代码不起作用,它在 http.get 行上引发错误。 "模板助手中的异常:.link@http://localhost:3000/client/views/uploader/uploader.js?b82cf5a1d421ef6a5a1e4eabaf8327fd1a9f2d75:43:2"

【问题讨论】:

  • 你在用 chrome 调试吗?如果没有,你可以吗?错误通常在 chrome 控制台中更加明确。
  • 我不是。感谢您的建议,这让我意识到我只是错过了 http 包... :-)

标签: javascript node.js meteor gridfs gridfs-stream


【解决方案1】:

正如 BraveKenny 建议的那样,我使用 Chrome 而不是 Firefox 进行调试。看来只是http包丢失了。

【讨论】:

  • 很遗憾他们没有让它在所有浏览器上都一样工作,或者至少在流星 CLI 的某个地方大声写下“使用 CHROME TO DEBUG”。
猜你喜欢
  • 1970-01-01
  • 2015-10-14
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
相关资源
最近更新 更多