后端是node的,代码,前端web咋通过ajax跨域下载文件到本地呢?求详细讲解。
下载文件为什么需要用ajax?
@514366607 我的文件在另外的服务器,web端不用ajax请求怎么请求?
@think2011 触发是没问题的,咋个获取到node那边响应回来的数据,我用ajax没有取到。
@shinygang 你理解错了,前端没有那么大的权限。 如果这是在烧烤的话,前端能做的只是一个叉子的作用,客人(用户) 通过 叉子(前端) 从 食物小车(后端) 上叉了内容,叉子并不能决定要什么食物,是由客人决定的。
客人(用户)
叉子(前端)
食物小车(后端)
js不能读写文件本地文件的。不然的话,随便上个网,电脑里就全是病毒了
<a href=“url”></a> 服务器端路由只要是二进制MIME,就下载了,不需要ajax,下载本身并不刷新页面
没明白需求,呵呵,如果非要使用ajax跨域取文件的话,可以试一下让对方服务器在HTTP报文头加上Access-Control-Allow-Origin。
@jinphen 这个我用了,那边返回了内容,ajax这边没法生成文件
@tulayang 没有直接给url的
@shinygang 你要生成文件保存到电脑上么?
ajax 本身也是通过URL请求的 你没URL怎么请求的?
@jinphen 是的,我获取到文件内容了,不知道js咋个保存成文件,要兼容。
@NexusLee 我url是动态生成的,而且这个url不是文件路径,是要通过node服务器那边处理获取文件内容的。我现在的问题是内容获取到了,咋个通过js转换成我想要的文件,并且兼容性好。
@shinygang 后来解决了么 我今天也遇到了
楼主,解决了的话,麻烦回复一下,说一下解决方案。
如果是node那边的文件内容,视为下载不就行了,另外打开窗口。利用node的流和pipe完全可以生成动态内容的问题,本身http也可以设置下载保存的文件名
https://nodejs.org/api/https.html
@akayzhang @beilunyang
服务端处理:
function returnOutput(req, res, output, callback) { res.setHeader('Access-Control-Allow-Origin', req.headers.origin); res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'); res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'}); var data = JSON.stringify({"result": output}); if (callback) { data = callback + "(" + data + ")"; } res.write(data); res.end(); QueueManager.removeObj(req.uniqueUrl); console.timeEnd(req.uniqueUrl); } /*下载商城折扣配置*/ app.post("/gm/downPropReduction",function(req,res){ var path = QSetting.current().pathName +'/prop_setting.js'; console.log(path); fs.exists(path, function (exists) { if (!exists) { returnErrorMessage(req, res, "This request URL was not found on this server."); } else { fs.readFile(path,{"encoding":"utf-8"}, function (err, file) { if (err) { returnErrorMessage(req, res, err); } else { returnOutput(req, res, file); } }); } }); });
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
下载文件为什么需要用ajax?
@514366607 我的文件在另外的服务器,web端不用ajax请求怎么请求?
@think2011 触发是没问题的,咋个获取到node那边响应回来的数据,我用ajax没有取到。
@shinygang 你理解错了,前端没有那么大的权限。 如果这是在烧烤的话,前端能做的只是一个叉子的作用,
客人(用户)通过叉子(前端)从食物小车(后端)上叉了内容,叉子并不能决定要什么食物,是由客人决定的。js不能读写文件本地文件的。不然的话,随便上个网,电脑里就全是病毒了
<a href=“url”></a> 服务器端路由只要是二进制MIME,就下载了,不需要ajax,下载本身并不刷新页面
没明白需求,呵呵,如果非要使用ajax跨域取文件的话,可以试一下让对方服务器在HTTP报文头加上Access-Control-Allow-Origin。
@jinphen 这个我用了,那边返回了内容,ajax这边没法生成文件
@tulayang 没有直接给url的
@shinygang 你要生成文件保存到电脑上么?
ajax 本身也是通过URL请求的 你没URL怎么请求的?
@jinphen 是的,我获取到文件内容了,不知道js咋个保存成文件,要兼容。
@NexusLee 我url是动态生成的,而且这个url不是文件路径,是要通过node服务器那边处理获取文件内容的。我现在的问题是内容获取到了,咋个通过js转换成我想要的文件,并且兼容性好。
@shinygang 后来解决了么 我今天也遇到了
楼主,解决了的话,麻烦回复一下,说一下解决方案。
如果是node那边的文件内容,视为下载不就行了,另外打开窗口。利用node的流和pipe完全可以生成动态内容的问题,本身http也可以设置下载保存的文件名
https://nodejs.org/api/https.html
@akayzhang @beilunyang
服务端处理: