文档章节

Dart 服务端开发 文件上传

scooplol
 scooplol
发布于 07/20 19:42
字数 322
阅读 19
收藏 0

clent端使用angular组件

upload_component.html

form id="myForm" method="POST" enctype="multipart/form-data">
    <input type="file" name="fileData"> <!-- file field -->
</form>
<span>{{progress}}</span>
<button  (click)="upload()">上传</button>

upload_component.dart

import 'package:angular/angular.dart';
import 'package:angular_forms/angular_forms.dart';
import "dart:html";
@Component(
  selector: 'upload',
  templateUrl: 'upload_component.html',
  styleUrls: const ['upload_component.css'],
  directives: const [CORE_DIRECTIVES,formDirectives],
)
class UploadComponent{
 //表示文件上传进度
  String progress;

  void upload(){
     // formDate 表示用于存储html文件表单字段的对象    
   var formData = new FormData(querySelector("#myForm"));

   final request = new HttpRequest();
  //使用post方法
   request.open('POST', 'http://localhost:8080/upload');
   //监听文件上传进度
   request.upload.onProgress.listen((ProgressEvent e) {
     progress = (e.loaded*100/e.total).toInt().toString() + '%';
   });
   //监听文件上传完成时调用
   request.onLoad.listen((e) {
     print('Uploaded'+request.response);

   });
   
   request.send(formData);
  }

}

server端

import 'dart:io';

import 'package:mime/mime.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as io;
import 'package:shelf_cors/shelf_cors.dart';
import 'package:shelf_rest/shelf_rest.dart';

void main() {
  var rootRouter = router()..post('/upload',(Request request) async{

  print(request.headers);
  var header = HeaderValue.parse(request.headers['content-type']);
  await for(MimeMultipart part in request.read().transform(new MimeMultipartTransformer(header.parameters['boundary']))) {
  if(part.headers.containsKey('content-disposition')) {
  header = HeaderValue.parse(part.headers['content-disposition']);
  String filename = header.parameters['filename'];
  final file = new File(filename);
  IOSink fileSink = file.openWrite();
  await part.pipe(fileSink);
  fileSink.close();
  }
  }

  return new Response.ok("Success",headers:{'Access-Control-Allow-Origin':'*'});
  });
    //通过此中间件设置跨域标头信息
  final cors = createCorsHeadersMiddleware(
      corsHeaders: {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Expose-Headers': 'Authorization, Content-Type',
        'Access-Control-Allow-Headers': 'Authorization, Origin, X-Requested-With, Content-Type, Accept',
        'Access-Control-Allow-Methods': 'GET, POST, PUT, PATCH, DELETE'
      }
  );

  var handler = const Pipeline()
      .addMiddleware(logRequests())
      .addMiddleware(cors)  
      .addHandler(rootRouter.handler);

  printRoutes(rootRouter);

  io.serve(handler, 'localhost', 8080).then((server) {
    print('Serving at http://${server.address.host}:${server.port}');
  });
}

 

© 著作权归作者所有

共有 人打赏支持
scooplol
粉丝 12
博文 103
码字总数 205785
作品 0
南充
程序员
私信 提问
Dart 服务端框架--Redstone

Redstone 是一个 Dart 用来开发服务器端应用的元数据驱动微框架。 Redstone.dart 可以让你轻松的通过 Web 接口来发布函数和类,例如: import 'package:redstone/server.dart' as app;@app....

红薯
2015/04/13
1K
0
最火移动端跨平台方案盘点:React Native、weex、Flutter

1、前言 跨平台一直是老生常谈的话题,cordova、ionic、react-native、weex、kotlin-native、flutter等跨平台框架的百花齐放,颇有一股推倒原生开发者的势头。 为什么我们需要跨平台开发? ...

JackJiang2011
08/13
0
0
Flutter 不一样的跨平台解决方案

本文主要介绍Flutter相关的东西,包括Fuchsia、Dart、Flutter特性、安装以及整体架构等内容。 1. 简介 Flutter作为谷歌最近推出的跨平台开发框架,一经推出便吸引了不少注意。关于Flutter,目...

我勒个去
10/01
0
0
Flutter学习之旅(三)----Flutter常见问题FAQ,看完之后不再是Flutter小白

很多人还不熟悉甚至没听过Flutter,只知道它是用来搞移动端开发的,现在Android和iOS开发已经很成熟了,还有RN(React Native)框架,为什么谷歌还要搞一个Flutter,它能够做什么,究竟比别人好...

飞翔的熊blabla
10/10
0
0
Google 宣布重启 Dart 编程语言,应对程序开发挑战

Google 的通用编程语言 Dart 正在重新启动。并推出Dart 2,该语言是针对优化Web和移动的客户端进行开发的。 在移动端,Google的UI框架Flutter使用Dart来简化学习,提高开发人员的速度并拥有高...

周其
02/25
5K
14

没有更多内容

加载失败,请刷新页面

加载更多

NEO区块链-DAPP开发直通车-第零篇

什么是DAPP DAPP 是以太坊发明的词汇 Decentralized Application. 目前基于区块链技术开发的应用程序广泛的接受使用了这一名称。 NEL将为开发DAPP提供全面的服务 什么是NEL NEL是 “NewEcon...

NEO-FANS
刚刚
0
0
可视化软件VisIt在Ubuntu18.04上的安装

可视化软件VisIt在Ubuntu18.04上的安装 参考文档及使用说明 1.下载 在官网下载页面下载合适版本的安装文件,Ubuntu有专用的 https://wci.llnl.gov/simulation/computer-codes/visit/executa...

佚文
6分钟前
0
0
GROUP BY GROUPING SETS

GROUPING SETS 子句是 SELECT 语句的 GROUP BY 子句的扩展。通过 GROUPING SETS 子句,您可采用多种方式对结果分组,而不必使用多个 SELECT 语句来实现这一目的。这就意味着,能够减少响应时...

hblt-j
16分钟前
2
0
selenium之表格的定位

真的勇士, 敢于直面惨淡的warning、 敢于正视淋漓的error 目录 被测试网页的HTML代码 1.遍历表格所有单元格 2.定位表格中的某个元素 3.定位表格中的子元素 总结 浏览器网页常常会包含各类表...

程序猿拿Q
21分钟前
1
0
adb命令启动展讯平台工厂模式

adb命令启动展讯工厂模式: adb shell am start com.sprd.engineermode/com.sprd.engineermode.EngineerModeActivity...

东街小霸王
22分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部