我的服务器使用.NET Core 2.1.402
下面是我的C#类:
public class SampleDetailsDto
{
public Guid Id{ get; set; }
public string Text { get; set; }
public IEnumerable<string> ImageUrls { get; set; }
public IFormCollection Images { get; set; }
}
这是我的C#控制器
[HttpPut]
[Route("{id:guid}")]
public async Task<IActionResult> UpdateAsync([FromRoute]Guid id, [FromForm] SampleDetailsDtodto)
{
Console.WriteLine(dto.Text);
Console.WriteLine(dto.Images.Length);
return OK();
}
我使用nswag生成客户端服务,但当前存在一个上传多个文件的bug(https://github.com/rsuter/nswag/issues/1421#issuecomment-424480418),所以我扩展了更新方法来创建我的,下面是代码:
public update(id: string, dto: SampleDetailsDto | null | undefined): Observable<SampleDetailsDto | null> {
let url_ = this._baseUrl + "/api/v1/Sample/{id}";
if (id === undefined || id === null)
throw new Error("The parameter 'id' must be defined.");
url_ = url_.replace("{id}", encodeURIComponent("" + id));
url_ = url_.replace(/[?&]$/, "");
let options_: any = {
observe: "response",
responseType: "blob",
headers: new HttpHeaders({
"Accept": "application/json"
})
};
return _observableFrom(this.transformOptions(options_)).pipe(_observableMergeMap(transformedOptions_ => {
return this._http.put<SampleDetailsDto>(url_,dto, transformedOptions_);
})).pipe(_observableMergeMap((response_: any) => {
return this.transformResult(url_, response_, (r) => this.processUpdate(<any>r));
})).pipe(_observableCatch((response_: any) => {
if (response_ instanceof HttpResponseBase) {
try {
return this.transformResult(url_, response_, (r) => this.processUpdate(<any>r));
} catch (e) {
return <Observable<SampleDetailsDto | null>><any>_observableThrow(e);
}
} else
return <Observable<SampleDetailsDto | null>><any>_observableThrow(response_);
}));
}
我想同时上传多个文件和数据,在这种情况下,所有的图像都链接到SampleDetailSDTo。但我们也可以想象有这种情况:
public class SampleDetailsDto
{
public Guid Id{ get; set; }
public string Text { get; set; }
public IEnumerable<ChildSampleDetailsDto> Children{ get; set; }
}
public class ChildSampleDetailsDto
{
public Guid Id{ get; set; }
public string Text { get; set; }
public IEnumerable<string> ImageUrls { get; set; }
public IFormCollection Images { get; set; }
}
是否可以将数据+多个文件发送到.NET Core Web API?
谢谢
从此处阅读maherjendoubi的答案:https://forums.asp.net/t/2099194.aspx?net+Core+Web+API+How+To+Upload+Multi+Part+Form+Data
public ActionResult CreateDocument()
{
foreach(var key in Request.Form.Keys)
{
var data = JsonConvert.DeserializeObject<ChildSampleDetailsDto>(Request.Form[key]);
var file = Request.Form.Files["file" + key];
}
return Ok();
}
对于角度部分,请使用httpRequest
:
const sendable = new FormData();
for (let i; i < files.length; i++) {
sendable.append('filedata' + i, files[i], files[i].name);
sendable.append('data' + i, JSON.stringify(data[i]));
}
const request = new HttpRequest(item.method,
item.url,
sendable,
{
reportProgress: true
});
// this._http: HttpClient
this._http.request(request)
.subscribe((event: any) => {
if (event.type === HttpEventType.UploadProgress) {
// on progress code
}
if (event.type === HttpEventType.Response) {
// on response code
}
}, error => {
// on error code
});
使用IFormFile
和[FromForm]
并且不访问提取文件的请求。
角度编码:
public sendFiles(files: File[], [...]): Observable<any> {
const formData = new FormData();
formData.append('files', files); // add all the other properties
return this.http.post('http://somehost/someendpoint/fileupload/', formData);
}
ASP.NET核心代码:
public class MyFileUploadClass
{
public IFormFile[] Files { get; set; }
// other properties
}
[HttpPost("fileupload")]
public async Task<IActionResult> FileUpload([FromForm] MyFileUploadClass @class) // -> property name must same as formdata key
{
// do the magic here
return NoContent();
}
我想上传多个文件到服务器。这是我的角度代码: 控制器的一部分: 问题是在控制器中: “files”列表总是空的(我也尝试了MultipartFile[]而不是list)。只有在指令中返回的不是所有文件,而是一个文件时,它才有效,例如: 代替
当我试图将一个文件从Angular 5.2上传到Laravel5.5应用程序时,我遇到了一个奇怪的行为。文件数据在服务器端不可见/不可访问。 我试过不同的头和方法,但似乎都失败了- HTML: 浏览器的开发人员工具显示提交了以下有效负载: 更新控制器代码真的超级简单 当我用一个对象替换formData时: null
我想把这些数据从当前的activity发送到更多的“BusinformationScard”activity。 @override public void onBindViewHolder(@nonnull ViewHolder ViewHolder,final int position){
我的环境使用 Gradle 进行构建,使用 Jenkins 进行 CI,使用 Artifactory 进行存储库。我为 Jenkins 使用 Artifactory 插件。 Jenkins 成功地构建了我的主 jar 文件并将其上传到 Artifactory。构建脚本具有第二个目标,用于在构建/分发下创建分发 zip 文件。Jenkins 成功创建了 zip 文件,但我不知道如何告诉它将该工件上传
我在Jersey写了一个Rest服务来上传多个文件。如下图所示。但是我需要Restservice类中的属性名,即name=“metadata”和name=“file”。 选择XML文件1: 选择PDF文件2: FormDataContentDisposition仅从表单中提取内容类型、文件名,而不是输入类型名称=“属性。 任何帮助都将不胜感激。 我张贴使用超文本标记语言的请求如下所示。 也发布HT
问题内容: 我想将两个数据对象传递给Go Template。一个是MongoDB查询结果,另一个是整数数组。 MongoDB查询: 我想通过以下代码发送“结果”和一个int数组 如果只有db结果,我们可以将其用作 在模板中,我们可以访问它{{.Name}}等(其中Name是[] User的结构字段) 请告诉我如何传递这些数据以及如何在模板中访问它们。 问题答案: 你可以仅通过一个单一的值,但该值可