如何将我服务器中的文件下载到访问nodeJS服务器中页面的计算机?
我正在使用ExpressJS而且我一直在尝试这个:
app.get('/download', function(req, res){
var file = fs.readFileSync(__dirname + '/upload-folder/dramaticpenguin.MOV', 'binary');
res.setHeader('Content-Length', file.length);
res.write(file, 'binary');
res.end();
});
Run Code Online (Sandbox Code Playgroud)
但我无法获取文件名和文件类型(或扩展名).任何人都可以帮助我吗?
我有一个WebApi/MVC应用程序,我正在开发一个angular2客户端(以取代MVC).我在理解Angular如何保存文件时遇到了一些麻烦.
该请求是确定的(正常工作与MVC,我们可以登录接收到的数据),但我无法弄清楚如何保存下载的数据(我主要是遵循同样的逻辑这篇文章).我确信这是非常简单的,但到目前为止,我根本不理解它.
组件功能的代码如下.我尝试过不同的方案,则斑的方法应该是,据我了解的路要走,但没有作用createObjectURL在URL.我甚至找不到URL窗口中的定义,但显然它存在.如果我使用该FileSaver.js模块,我会得到同样的错误.所以我猜这是最近发生的变化或者尚未实施.如何在A2中触发文件保存?
downloadfile(type: string){
let thefile = {};
this.pservice.downloadfile(this.rundata.name, type)
.subscribe(data => thefile = new Blob([data], { type: "application/octet-stream" }), //console.log(data),
error => console.log("Error downloading the file."),
() => console.log('Completed file download.'));
let url = window.URL.createObjectURL(thefile);
window.open(url);
}
Run Code Online (Sandbox Code Playgroud)
为了完整起见,获取数据的服务如下,但它唯一做的是发出请求并传递数据而不进行映射(如果成功):
downloadfile(runname: string, type: string){
return this.authHttp.get( this.files_api + this.title +"/"+ runname + "/?file="+ type)
.catch(this.logAndPassOn);
}
Run Code Online (Sandbox Code Playgroud) 我需要从我的后端下载一个excel,它返回一个文件.
当我提出请求时,我收到错误:
TypeError:您提供了"undefined",其中包含了一个流.您可以提供Observable,Promise,Array或Iterable.
我的代码是:
this.http.get(`${environment.apiUrl}/...`)
.subscribe(response => this.downloadFile(response, "application/ms-excel"));
Run Code Online (Sandbox Code Playgroud)
我试过get和map(...)但是没有用.
细节:角度5.2
引用:
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/finally';
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/catch';
Run Code Online (Sandbox Code Playgroud)
内容 - 响应类型:
Content-Type: application/ms-excel
Run Code Online (Sandbox Code Playgroud)
怎么了?
使用res.send(数据)而不是res.json(数据)更新
使用Angular 6和NodeJS我正在做一个Web应用程序.我正在尝试从http发布请求下载文件.
我像这样向服务器发送请求.从我的组件我调用服务中的函数.在组件中,我怀疑有服务器的答案,当我有它时,我创建一个新的Blob与响应和我使用FileSaver下载PDF.
现在,当我从服务器收到答案时,客户端将其视为错误,而状态为200.错误消息为: "解析http:// localhost:3000/api/experiment/regression期间的Http失败" 请参阅下面的截图.
Component.ts
this.api.postML(this.regression).subscribe(
res => {
console.log(res);
let pdf = new Blob(res.data, { type: "application/pdf" });
let filename = "test.pdf";
FileSaver.saveAs(pdf, filename);
},
err => {
alert("Error to perform the regression");
console.log(err);
}
);
Run Code Online (Sandbox Code Playgroud)
API.Service.ts
public postML(data): Observable<any> {
// Create url
let url = `${baseUrl}${"experiment/regression"}`;
let options = {
headers: { "Content-Type": "application/json", Accept: "application/pdf" }
};
// Call the http POST
return this.http
.post(url, data, options)
.pipe(catchError(this.handleError));
}
Run Code Online (Sandbox Code Playgroud)
然后从服务器,它执行一些代码与发送的数据,并生成PDF文件.然后,我想将pdf作为对客户的回复发送.我试过这样的: …
angular ×3
typescript ×3
download ×2
file ×2
javascript ×2
node.js ×2
blob ×1
express ×1
fileapi ×1
mean-stack ×1