2

API/Rest エンドポイントは初めてなので、このトピックについての経験不足をお許しください。

.net コア 3.1 を使用しています。そして、文字列とファイルの 2 つのパラメーターを除いて、エンドポイントを作成する任務を負っています。

ファイルはバイナリデータになります(.bciファイル形式、カスタムのものだと思いますが、基本的には.txtファイルで、マシン用に.bciに変更されています)

ファイルを取得し、stringReader を使用してファイルを読み取り、ローカルにファイルに保存する必要があります。繰り返しますが、私はエンドポイントに不慣れで、バイナリデータを読んでいます。誰か助けてもらえますか? 私は今日インターネット全体を見てきましたが、優勢ではありません。

以下のコードが間違っていることは知っていますが、これには本当に苦労しています。どんな助けでも大歓迎です。

//GET: api/ProcessResultsFiles]
        [HttpGet]
        public async Task<IActionResult> ProcessResults(IFormFile file, string bench)
        {
            await ReadData(file);
            return Ok();
        }

        private static Task<byte[]> ReadData(IFormFile benchNameFile)
        {
            using (StringReader sr = new StringReader(benchNameFile))
            {
                string input = null;
                while ((input = sr.ReadLine()) != null)
                {
                    Console.WriteLine(input);
                }
            }
        }
4

1 に答える 1

0

あなたの説明から、ファイルを物理ストレージ/フォルダーにアップロードしたいと思います。その後、ファイルをローカルにダウンロードしたい場合があります。その場合は、次のサンプルを参照できます。

    [HttpPost("upload")]
    public IActionResult Upload(List<IFormFile> formFiles, string subDirectory)
    {
        try
        {
            subDirectory = subDirectory ?? string.Empty;
            var target = Path.Combine(_environment.WebRootPath, subDirectory);

            if(!Directory.Exists(target))
                Directory.CreateDirectory(target);

            formFiles.ForEach(async file =>
            {
                if (file.Length <= 0) return;
                var filePath = Path.Combine(target, file.FileName);
                using (var stream = new FileStream(filePath, FileMode.Create))
                {
                    await file.CopyToAsync(stream);
                }
            });

            return Ok("Upload success!");
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }
    [HttpPost("download")]
    public IActionResult DownLoad( string subDirectory,   string filename)
    { 
        //Build the File Path.
        string path = Path.Combine(_environment.WebRootPath, subDirectory +"/"+ filename);

        if (System.IO.File.Exists(path))
        { 
            //Read the File data into Byte Array.
            byte[] bytes = System.IO.File.ReadAllBytes(path);
            //download the file.
            return File(bytes, "application/octet-stream", filename);
        }
        else
        {
            return Ok("file not exist");
        }
    }

以下のような結果:

ここに画像の説明を入力

asp.net コアでのアップロード ファイルの詳細については、次の記事を参照してください。

ASP.NET Core でファイルをアップロードする

Web API を使用して複数のファイルをアップロードおよびダウンロードする

上記の記事から、ファイルをアップロードするときに、バイト配列を保存する場合は、次のコードを参照できます。

public async Task<IActionResult> OnPostUploadAsync()
{
    using (var memoryStream = new MemoryStream())
    {
        await FileUpload.FormFile.CopyToAsync(memoryStream);

        // Upload the file if less than 2 MB
        if (memoryStream.Length < 2097152)
        {
            var file = new AppFile()
            {
                Content = memoryStream.ToArray()
            };

            _dbContext.File.Add(file);

            await _dbContext.SaveChangesAsync();
        }
        else
        {
            ModelState.AddModelError("File", "The file is too large.");
        }
    }

    return Page();
}
于 2021-08-06T07:05:06.033 に答える