我正在研究 dotnet 核心 WebAPI 2.1,但找不到将图像发送到正文的方法。
控制器看起来像这样:
[HttpPost("api/image")]
public IActionResult Post([FromBody]IFormFile file)
{
var filePath = Path.GetTempFileName();
if (file.Length > 0)
{
return Ok();
}
return BadRequest();
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用 Consumes
[Consumes("application/json", "application/json-patch+json", "multipart/from-data")]
Run Code Online (Sandbox Code Playgroud)
同样在邮递员中,我已将 Content-Type 设置为 multipart/form-data
我正在使用ASP.NET Core(MVC 6)EF Visual Studio开发一个小博客.我无法找到如何将图像保存到数据库.我已经读过有关IFormfile但我真的不明白如何去做,我被卡住了.我是新手,很想得到一些帮助.
我想将图像保存到我正在创建的帖子中(以相同的形式).因此,我想将它保存到postID.然后我需要能够显示图像,我该怎么做?我知道有很多要问,但我不知道在哪里转.如果您有任何好的提示或想法,请随时发送链接.
提前致谢!
我正在使用 .net core Web api 来接受、上传和下载文件内容。
我已经尝试过 IFormFile 和简单的 base64 编码的文件内容
UploadFile(IFormFile file)
UploadFile([FromBody] string base64Filecontentstring)
我只是想知道使用这些是否有什么区别?如果有,您应该使用哪一种以及何时使用?
我想测试一个函数,它通过集成测试将文件附加到RavenDB数据库中的文档.为此,我需要一个实例IFormFile.
显然,我无法从接口实例化,所以我试图实例化一个FormFile从IFormFile接口继承的实例.
using (var stream = File.OpenRead("placeholder.pdf"))
{
var file = new FormFile(stream, 0, stream.Length, null, Path.GetFileName(stream.Name))
{
ContentType = "application.pdf"
};
}
Run Code Online (Sandbox Code Playgroud)
但是这会引发以下错误:
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.AspNetCore.Http.Internal.FormFile.set_ContentType(String value)
Run Code Online (Sandbox Code Playgroud)
当我ContentType = "application.pdf"从代码中删除它时,它允许我实例化一个新实例,但没有ContentType.
如何FormFile使用ContentType和不使用Moq框架实例化实例?
在我的ASP.NET Core后端,我有一个控制器函数,如下所示:
[HttpPost]
[Route("documents/upload")]
public async Task<IActionResult> UploadFile(ICollection<IFormFile> files)
{
...
}
Run Code Online (Sandbox Code Playgroud)
在我的前端,我调用这样的函数:
var postSettings = {
method: 'POST',
credentials: 'include',
mode: 'cors'
}
uploadDocuments( files ) {
var data = new FormData();
data.append('files', files);
postSettings.body = data;
return fetch(endPoint + '/documents/upload', postSettings);
}
Run Code Online (Sandbox Code Playgroud)
如果"files"是单个文件 - 不是具有一个文件的数组,而是单个File对象 - UploadFile则使用ICollection<IFormFile>包含单个文件的文件进行调用.
如果"files"是文件列表,UploadFile则调用FileList或File对象数组为空ICollection<IFormFile>.
如何以可以解析为ICollection<IFormFile>?的方式提交文件列表?
我存储了图像文件夹名称"图像",它不在wwwroot文件夹中.所以现在我无法访问它所以我的问题是如何授予访问包含图像和文件夹的文件夹不是wwwroot的子文件夹?或者它必须将这些文件放在wwwroot文件夹中?
长话短说,我有一个观点,我在哪里使用
@using (Html.BeginForm("AddFormToOrder", "Form", FormMethod.Post, new { @id = "OrderForm", enctype = "multipart/form-data" }))
Run Code Online (Sandbox Code Playgroud)
这将有一个文件上传,一旦我选择文件并单击添加到订单按钮,AddFormToorder 将使用以下信息触发
楷模
public class Orders
{
public List<Forms> FormList { get; set; }
public Orders()
{
FormList = new List<Forms>();
}
}
public class Forms
{
public ICollection<IFormFile> Files { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中我正在这样做
public IActionResult AddFormToOrder(Forms form)
{
var Orders = JsonConvert.DeserializeObject<Orders>(HttpContext.Session.GetString("Shop_Orders"));
Orders.Forms.Add(form);
var serializedModel = JsonConvert.SerializeObject(Orders);
HttpContext.Session.SetString("Shop_Orders", serializedModel);
return RedirectToAction("Index", "Form");
}
Run Code Online (Sandbox Code Playgroud)
这个问题是,一旦返回并进入索引,我再次反序列化但随后出现以下错误
JsonSerializationException:无法创建 Microsoft.AspNetCore.Http.IFormFile 类型的实例。类型是接口或抽象类,不能被实例化。
现在如果我添加一个没有文件的订单,一切正常,这个错误永远不会抛出。我相信问题是使用 IFormFile 序列化模型,但我不知道如何解决它。是否可以序列化 IformFile 类型?
我有个问题.我将一些图像存储在DB中作为base64,现在我需要编辑包含此图像的此对象.用户在表单中上传图像,然后将其转换为base64并将其存储在DB中.现在我的问题很热,将base64图像转换回IFormFile以显示它以编辑整个对象.
日Thnx
我正在使用 Aurelia Fetch Client 向 Web API 端点发送文件上传请求。但是 IFormFile 是空的所有磁贴。我的代码如下。
const formData = new FormData();
formData.append("files", account.statement);
const response = await this.http.fetch(url, { method: "POST", body: formData
});
Run Code Online (Sandbox Code Playgroud)
[HttpPost]
public IActionResult Save ()
{
var files = Request.Form.Files;
}
Run Code Online (Sandbox Code Playgroud)
文件始终为空。我已经关注了这篇文章,并按照上面提到的做了。但仍然无法弄清楚什么是错的。
我正在尝试将 base64String 列表转换为 IFormFile 列表。当我尝试时,MemoryStream stream = new MemoryStream(bytes)我得到了一个stream.ReadTimeout SystemInvalidOperation. 那么为什么它不起作用呢?
这是我的代码:
private async Task<List<IFormFile>> Base64ToImage(List<EquipmentFile> equipmentFiles)
{
List<IFormFile> formFiles = new List<IFormFile>();
foreach (var eqp in equipmentFiles)
{
byte[] bytes = Convert.FromBase64String(eqp.File);
MemoryStream stream = new MemoryStream(bytes);
IFormFile file = new FormFile(stream, 0, bytes.Length, eqp.Name, eqp.Name);
formFiles.Add(file);
}
return formFiles;
}
Run Code Online (Sandbox Code Playgroud)
我的堆栈跟踪:
System.InvalidOperationException: Timeouts are not supported on this stream.
at System.IO.Stream.get_ReadTimeout()
at FieldService.CallCenter.Api.Controllers.EquipmentLibraryController.Base64ToImage(List`1 equipmentFiles) in C:\Users\CMTech-DEV\Documents\cmtech\fieldservice-api\src\CallCenter\FieldService.CallCenter.API\Controllers\EquipmentLibraryController.cs:line 331
at System.IO.Stream.get_ReadTimeout()
at FieldService.CallCenter.Api.Controllers.EquipmentLibraryController.Base64ToImage(List`1 equipmentFiles) in C:\Users\CMTech-DEV\Documents\cmtech\fieldservice-api\src\CallCenter\FieldService.CallCenter.API\Controllers\EquipmentLibraryController.cs:line …Run Code Online (Sandbox Code Playgroud)