作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要使用angular 2上传文件,我在客户端使用它,我在服务器端使用Web Api。我如何使用这个组合来实现
最佳答案
我使用 Angular2 和 ASP.NET Core 成功上传了文件。
我意识到您的后端并不完全相同,但我认为这可能会让您朝着正确的方向前进。
我用了ng2-file-upload from valor-software
使用 npm install 安装它,将它添加到你的包文件夹中,使用 systemjs 或 webpack 配置它。我使用 angular-cli webpack,所以我手动进行的唯一配置是在组件文件中。
前端 Angular2
import { Component, Input } from '@angular/core';
import { NgClass, NgStyle } from '@angular/common';
import {FILE_UPLOAD_DIRECTIVES, FileUploader, Headers} from 'ng2-file-upload/ng2-file-upload';
const URL = 'http://localhost:49513/api/values/';
@Component({
selector: '...',
templateUrl: '...',
providers: [...],
directives: [FILE_UPLOAD_DIRECTIVES, NgClass, NgStyle]
})
export class ProjectDetailsComponent {
public myHeaders: Headers[] = [];
public uploader:FileUploader = new FileUploader(
{
url: URL,
headers: <Headers[]> [
{ name: 'Content-Type', value: 'multipart/form-data' }
]
});
public hasBaseDropZoneOver:boolean = false;
public hasAnotherDropZoneOver:boolean = false;
...
public fileOverBase(e:any):void {
this.hasBaseDropZoneOver = e;
}
public fileOverAnother(e:any):void {
this.hasAnotherDropZoneOver = e;
}
...
}
后端使用 ASP.NET Core
[HttpPost]
public async Task<ActionResult> Post(IFormFile file)
{
try
{
if (file != null && file.Length > 0)
{
var savePath = Path.Combine(_appEnvironment.WebRootPath, "uploads", file.FileName);
using (var fileStream = new FileStream(savePath, FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
return Created(savePath, file)
}
return BadRequest();
}
catch (Exception)
{
return StatusCode(500, ex.Message);
}
}
奖励:我编辑了他们的 html 以使用 Material2而不是 Bootstrap 。
<div class="container">
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href>Angular2 File Upload</a>
</div>
</div>
<div class="row">
<div class="col-md-3">
<h3>Select files</h3>
<div ng2FileDrop
[ngClass]="{'nv-file-over': hasBaseDropZoneOver}"
(fileOver)="fileOverBase($event)"
[uploader]="uploader"
class="well my-drop-zone">
Base drop zone
</div>
</div>
<div class="col-md-9" style="margin-bottom: 40px">
<h3>Upload queue</h3>
<p>Queue length: {{ uploader?.queue?.length }}</p>
<table class="table">
<thead>
<tr>
<th width="50%">Name</th>
<th>Size</th>
<th>Progress</th>
<th>Status</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of uploader.queue">
<td><strong>{{ item?.file?.name }} {{item?.progress}} %</strong></td>
<td nowrap>{{ (item?.file?.size/1024/1024).toFixed(2) }} MB</td>
<td>
<div class="progress" style="margin-bottom: 0;">
<md-progress-bar mode="determinate" value="{{item.progress}}"></md-progress-bar>
</div>
</td>
<td class="text-center">
<span *ngIf="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>
<span *ngIf="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>
<span *ngIf="item.isError"><i class="glyphicon glyphicon-remove"></i></span>
</td>
<td nowrap>
<button type="button" class="btn btn-success btn-xs"
(click)="item.upload()" [disabled]="item.isReady || item.isUploading || item.isSuccess">
<span class="glyphicon glyphicon-upload"></span> Upload
</button>
<button type="button" class="btn btn-warning btn-xs"
(click)="item.cancel()" [disabled]="!item.isUploading">
<span class="glyphicon glyphicon-ban-circle"></span> Cancel
</button>
<button type="button" class="btn btn-danger btn-xs"
(click)="item.remove()">
<span class="glyphicon glyphicon-trash"></span> Remove
</button>
</td>
</tr>
</tbody>
</table>
<div>
<div>
Queue progress:
<div class="progress" style="">
<div class="progress-bar" role="progressbar" [ngStyle]="{ 'width': uploader.progress + '%' }"></div>
</div>
</div>
<button (click)="uploader.uploadAll()" [disabled]="!uploader.getNotUploadedItems().length" md-raised-button class="md-raised md-primary">Upload all</button>
<button (click)="uploader.cancelAll()" [disabled]="!uploader.isUploading" md-raised-button class="md-raised md-warn">Cancel all</button>
<button (click)="uploader.clearQueue()" [disabled]="!uploader.queue.length" md-raised-button class="md-accent md-hue-1">Remove all</button>
</div>
</div>
</div>
</div>
关于angular - 如何使用angular 2上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39226697/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!