使用节点js保存来自请求的图像数据

时间:2018-02-02 09:17:19

标签: node.js

我是节点js的新手。

我使用节点js编写了一个服务器,它将读取请求数据并将该数据保存到图像文件中。(因为数据本身就是图像数据。)

我写的节点js脚本是:

const http = require('http');
const fs = require('fs');

const server = http.createServer();

server.on('request', function(request, respond) {
    var body = '';
    filePath = '1.jpg';
    request.on('data', function(data) {
        body += data;
    });

    request.on('end', function (){
        fs.appendFile(filePath, body, function() {
            respond.end();
        });
    });
});

server.listen(8080);

从同一台机器上的终端,我发出了一个curl命令来发送图像:

 curl -X POST --data @tmp.jpg 127.0.0.1:8080

tmp.jpg在我的机器上完美打开。

但是1.jpg(由节点js创建)没有打开。

可能是什么问题?

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

问题在于你使用curl。要发送二进制数据,请改为使用import { RouterModule, Routes } from '@angular/router'; import { NgModule } from '@angular/core'; import { PagesComponent } from './pages.component'; import { DashboardComponent } from './dashboard/dashboard.component'; import { ManageComponent } from './manage/manage.component'; import { UserComponent } from './user/user.component'; const routes: Routes = [{ // path: '/home', path:'', component: PagesComponent, children: [{ path: 'dashboard', component: DashboardComponent, }, { path: 'ui-features', loadChildren: './ui-features/ui-features.module#UiFeaturesModule', }, { path: 'add-booking', loadChildren: './add-booking/addbooking.module#AddbookingModule', },{ path: 'components', loadChildren: './components/components.module#ComponentsModule', }, { path: 'maps', loadChildren: './maps/maps.module#MapsModule', }, { path: 'charts', loadChildren: './charts/charts.module#ChartsModule', }, { path: 'editors', loadChildren: './editors/editors.module#EditorsModule', }, { path: 'forms', loadChildren: './forms/forms.module#FormsModule', }, { path: 'tables', loadChildren: './tables/tables.module#TablesModule', }, { path: 'manage', component: ManageComponent, }, { path: 'user', component: UserComponent, },{ path: '', redirectTo: 'dashboard', pathMatch: 'full', }], }]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule], }) export class PagesRoutingModule { } 标志:

--data-binary

此外,您需要使用curl -X POST --data-binary @image.jpg 127.0.0.1:8080 代替writeFile。后者会将每个请求的数据添加到同一个文件中,而该文件将无法作为图像读取。

此外,在处理二进制数据时,我发现使用缓冲区而不是字符串更容易。请求处理如下所示:

appendFile