System.IO.File Невыбираемый элемент «Файл» нельзя использовать как метод - PullRequest
0 голосов
/ 15 октября 2019

Привет сообщество Stackoverflow,

При загрузке файла из Web-контроллера API появляется следующее сообщение об ошибке.

Невозможно вызвать элемент «Файл» нельзя использовать как метод

Это моя таблица базы данных:

CREATE TABLE [cafe].[t06_03_02_jobAttachments](
[ID] [int] IDENTITY(1,1) NOT NULL,
[jobAttachmentId] [int] NOT NULL,
[jobId] [int] NOT NULL,
[file] [varbinary](max) NOT NULL,
[name] [varchar](100) NOT NULL,
[fileExtension] [varchar](10) NOT NULL,
[contentType] [varchar](50) NOT NULL,
[fileSize] [int] NOT NULL
) ON [PRIMARY]

enter image description here

Это моя модель данных:

namespace api.Models.Jobs
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;

[Table("cafe.t06_03_02_jobAttachments")]
public partial class t06_03_02_jobAttachments
{
    public int ID { get; set; }

    public int jobAttachmentId { get; set; }

    public int jobId { get; set; }

    [Required]
    public byte[] file { get; set; }

    [Required]
    [StringLength(100)]
    public string name { get; set; }

    [Required]
    [StringLength(10)]
    public string fileExtension { get; set; }

    [Required]
    [StringLength(50)]
    public string contentType { get; set; }

    public int fileSize { get; set; }

 }
}

Вот код моего контроллера:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Description;
using api.Models;
using api.Models.Jobs;
using System.Data.SqlClient;
using System.Text;
using System.IO;
using System.Web.Mvc;

namespace api.Controllers.jobs
{
 public class JobsController : ApiController
 {
    [HttpGet]
    [ResponseType(typeof(t06_03_02_jobAttachments))]
    public async Task<IHttpActionResult> Gett06_03_02_jobAttachments(int id)
    {
      t06_03_02_jobAttachments t06_03_02_jobAttachments = await db.t06_03_02_jobAttachments.FindAsync(id);
        if (t06_03_02_jobAttachments == null)
        {
            return NotFound();
        }
        return File(t06_03_02_jobAttachments.file, t06_03_02_jobAttachments.contentType, t06_03_02_jobAttachments.name);
    }
 }
}

Я получаю эту ошибку на своем контроллере, когда пытаюсь вернуть File в виде текстового файла. Все, что я хочу сделать, это прочитать файл (сохраненный в виде байтового массива в базе данных) и вернуть его в мое приложение Angular. Я пробовал несколько решений, размещенных в Интернете, но ни одно из них не помогло мне. Буду признателен за любую помощь, которую я получу от этого блога. Я использую .NET Framework 4.6.1 и MVC 5.2.7. Спасибо

1 Ответ

0 голосов
/ 15 октября 2019

Я создал класс FileResult, который можно использовать для возврата двоичного содержимого.

public class FileResult : IHttpActionResult
{
    private byte[] _content;
    private string _contentType;
    public FileResult(byte[] content, string contentType)
    {
        _content = content;
        _contentType = contentType;
    }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        if (cancellationToken.IsCancellationRequested)
            return null;

        // per /5850705/vozvrat-dvoichnogo-faila-iz-kontrollera-v-asp-net-web-api do not wrap this in a using block
        System.IO.MemoryStream stream = new System.IO.MemoryStream(_content);
        stream.Seek(0, System.IO.SeekOrigin.Begin);
        HttpResponseMessage response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
        response.Content = new StreamContent(stream);
        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(_contentType);
        return Task.FromResult(response);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...