使用 HTTP.get 在 img src 中提供文件
Serve files in img src using HTTP.get
我的文件只有在我将 x-authentication 标记添加到 "GET" http 请求的 header 时才能提供(我不想使用 cookie)。直接后果是我不能仅通过在 html 中使用它的 URL 来调用文件,我需要从 JavaScript 调用中获取它,最好是异步的。
因为我的客户端是Meteor,所以我想使用HTTP.get方法。我得到了我用 http.get 获取我的文件的部分,但不是我附加文件的部分,例如,图像的 src 属性。
如果我想在我的页面中使用我的文件下载结果,我应该如何 return? (e.g.attach 它到图像的 src 属性)。我应该使用专用模板还是可以使用助手来实现?
编辑: 我取得了一些进展。根据对类似案例“how to display images downloaded using XMLHttpRequest 的回答,我发现您可以在 base64 中对响应内容文本进行编码。
所以这是我的想法:
我使用助手 return img src 属性。我知道当我使用它时 http 调用是异步的 client-side 所以我 return 默认情况下是一个占位符值(见最后一行)
这是我的代码(在 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 行上抛出错误。
"Exception in template helper: .link@http://localhost:3000/client/views/uploader/uploader.js?b82cf5a1d421ef6a5a1e4eabaf8327fd1a9f2d75:43:2"
根据 BraveKenny 的建议,我使用 Chrome 而不是 Firefox 进行调试。看来只是缺少http包。
我的文件只有在我将 x-authentication 标记添加到 "GET" http 请求的 header 时才能提供(我不想使用 cookie)。直接后果是我不能仅通过在 html 中使用它的 URL 来调用文件,我需要从 JavaScript 调用中获取它,最好是异步的。
因为我的客户端是Meteor,所以我想使用HTTP.get方法。我得到了我用 http.get 获取我的文件的部分,但不是我附加文件的部分,例如,图像的 src 属性。
如果我想在我的页面中使用我的文件下载结果,我应该如何 return? (e.g.attach 它到图像的 src 属性)。我应该使用专用模板还是可以使用助手来实现?
编辑: 我取得了一些进展。根据对类似案例“how to display images downloaded using XMLHttpRequest 的回答,我发现您可以在 base64 中对响应内容文本进行编码。
所以这是我的想法: 我使用助手 return img src 属性。我知道当我使用它时 http 调用是异步的 client-side 所以我 return 默认情况下是一个占位符值(见最后一行)
这是我的代码(在 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 行上抛出错误。 "Exception in template helper: .link@http://localhost:3000/client/views/uploader/uploader.js?b82cf5a1d421ef6a5a1e4eabaf8327fd1a9f2d75:43:2"
根据 BraveKenny 的建议,我使用 Chrome 而不是 Firefox 进行调试。看来只是缺少http包。