gpt4 book ai didi

javascript - 使用 Aurelia 将数据和文件发布到 ASP.NET webapi

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:42:26 27 4
gpt4 key购买 nike

我正在尝试将文件上传添加到我的应用程序中。

这是我的 View ,有两个输入,一个文本和一个文件:

<template>
<form class="form-horizontal" submit.delegate="doImport()">
<div class="form-group">
<label for="inputLangName" class="col-sm-2 control-label">Language key</label>
<div class="col-sm-10">
<input type="text" value.bind="languageKey" class="form-control" id="inputLangName" placeholder="Language key">
</div>
</div>
<div class="form-group">
<label for="inputFile" class="col-sm-2 control-label">Upload file</label>
<div class="col-sm-10">
<input type="file" class="form-control" id="inputFile" accept=".xlsx" files.bind="files">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Do import</button>
</div>
</div>
</form>
</template>

在我的 webapi 中,我有从 here 复制并粘贴的代码:

public class ImportLanguageController : ApiController
{
public async Task<HttpResponseMessage> Post()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}

string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);

try
{
// Read the form data.
await Request.Content.ReadAsMultipartAsync(provider);

// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
//Trace.WriteLine(file.Headers.ContentDisposition.FileName);
//Trace.WriteLine("Server file path: " + file.LocalFileName);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
}

最后我在 Aurelia 中有了我的 View 模型:

import {inject} from 'aurelia-framework';
import {HttpClient, json} from 'aurelia-fetch-client';

@inject(HttpClient)
export class Import {
languageKey = null;
files = null;

constructor(http){
http.configure(config => {
config
.useStandardConfiguration();
});

this.http = http;
}

doImport() {
//What goes here??
}
}

所以我的问题是,函数 doImport 中的逻辑是什么?我不确定 webapi 中我的 Controller 方法中的代码是否正确,请随时对此发表评论。

最佳答案

这应该可以帮助您入门:

doImport() {
var form = new FormData()
form.append('language', this.languageKey)
form.append('file', this.files)
//Edit, try this if the first line dont work for you
//form.append('file', this.files[0])

this.http.fetch('YOUR_URL', {
method: 'post',
body: form
})
.then( response => {
// do whatever here

});
}

根据您提供的 webapi 响应(如果有),您可能需要使用以下内容:

.then( response => response.json() )
.then( response => {
// do whatever here
});

我还应该提到的一件事是 fetch 使用 COR,因此如果您遇到任何 CORS 错误,您可能需要在服务器端启用它们。

这是 Aurelia 部分的 gist.run(除非您更改 URL,否则无法发布): https://gist.run/?id=6aa96b19bb75f727271fb061a260f945

关于javascript - 使用 Aurelia 将数据和文件发布到 ASP.NET webapi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37589636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com