【发布时间】:2017-03-20 18:16:21
【问题描述】:
我正在尝试通过 jQuery.ajax() 将 AJAX 调用添加到 Phantomjs 获取的页面以下载附加图像 /myfile.jpg:
var result = page.evaluate(function() {
var out;
$.ajax({
'async' : false,
'url' : '/myfile.jpg',
'success' : function(data, status, xhr) {
out = data;
}
});
return out;
});
fs.write('myfile.jpg', result, 'wb');
数据似乎已成功下载并保存到本地文件myfile.jpg,但它是一个损坏的图像,根本无法打开。
文件大小似乎正确,但我不确定。 Notepad++ 文本编辑器中打开的内容不是文本,而是大量无法识别的字符或字节。
我在这里做错了什么?
【问题讨论】:
-
为什么需要这样做?通过 AJAX 下载文件充其量是非常不稳定的,而在最坏的情况下则是一个坏主意——尤其是在处理二进制文件类型时。您还应该删除
async: false设置。如果您检查控制台,您甚至会看到来自浏览器的有关其使用的警告。 -
您在问题中同时提到了
.jpg和.png。您是否在某个阶段以错误的格式保存文件? -
为什么不简单地
$('img').attr('src', '/myfile.jpg')? -
“在 Notepad++ 文本编辑器中打开的内容不是文本,而是大量无法识别的字符或字节” - 它是二进制文件。您打开一个图像文件。你期望得到什么?
-
这很令人困惑,您正在使用 ajax 下载二进制图像文件,这是……错误,然后您说您在 Notepad++ 中打开文件并且它不是文本,只是 “无法识别的字符或字节”,你期待什么,这是一个二进制文件?
标签: jquery ajax image binary phantomjs