【解決方法】オブジェクト参照がオブジェクト インスタンスに設定されていません。

[ad_1]

親愛なるみんな
私はasp.netコア3.1を使用しています。データベースにすべてアップロードまたはダウンロードできません

ASP.NET
public class Files
   {
       [Key]
       public int DocumentId { get; set; }
       public string Name { get; set; }
       public string FileType { get; set; }
      public byte[] DataFiles { get; set; }

これが私のコントローラーです

ASP.NET
<pre>public class DemoController : Controller
    {
        private readonly ApplicationDbContext _context;
        public DemoController(ApplicationDbContext context)
        {
            _context = context;
        }
        public IActionResult Index()
        {
            var result = _context.Files.ToList();
            return View(result);
        }

        [HttpPost]
        public IActionResult Index(IFormFile files)
        {
            if (files != null)
            {
                if (files.Length > 0)
                {
                    //Getting FileName
                    var fileName = Path.GetFileName(files.FileName);
                    //Getting file Extension
                    var fileExtension = Path.GetExtension(fileName);
                    // concatenating  FileName + FileExtension
                    var newFileName = String.Concat(Convert.ToString(Guid.NewGuid()), fileExtension);

                    var objfiles = new Files()
                    {
                        DocumentId = 0,
                        Name = newFileName,
                        FileType = fileExtension,
                    };

                    using (var target = new MemoryStream())
                    {
                        files.CopyTo(target);
                        objfiles.DataFiles = target.ToArray();
                    }

                    _context.Files.Add(objfiles);
                    _context.SaveChanges();

                }
            }
            return View();
        }

           public IActionResult DownloadImage(int id)
       {
           byte[] bytes;
         string fileName, contentType;
        var item = _context.Files.FirstOrDefault(c => c.DocumentId == id);

             if (item != null)
          {
                   fileName = item.Name;

                  contentType = item.FileType;
                  bytes = item.DataFiles;
                  return File(bytes, contentType, fileName);
               }
             return Ok("Can't find the File");
            }      
    }
}

これが私の見解です

ASP.NET
<pre>@model List<Info.Models.Files>
@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>
<div class="row">
    <div class="col-md-5">
        <form method="post" enctype="multipart/form-data" asp-controller="Demo" asp-action="Index">
            <div class="form-group">
                <div class="col-md-10">
                    <p>Upload file</p>
                    <input class="form-control" name="files" type="file" />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-10">
                    <input class="btn btn-success" type="submit" value="Upload" />
                </div>
            </div>
        </form>
    </div>
</div>
<ul>
    @foreach (var item in Model)
    {
        <li>
            <a asp-action="DownloadImage"
               asp-route-filename="@item.Name">
                @item.Name
            </a>
        </li>
    }
</ul>

私が試したこと:

ファイルをデータベースに保存し、その URL を表示してダウンロードできるようにしたい

解決策 1

これは、私たちが最もよく聞かれる問題の 1 つであり、私たちが最も答えられない問題でもありますが、あなた自身が最も答えられる問題です。

エラーの意味を説明しましょう。変数、プロパティ、またはメソッドの戻り値を使用しようとしましたが、null が含まれています。これは、変数にクラスのインスタンスがないことを意味します。
ポケットのようなものです。シャツにポケットがあり、ペンを入れるのに使用します。 ポケットに手を入れてペンがないことに気づいたら、紙に自分の名前を書くことはできません。 空のポケットはヌル値 (ここにはペンがありません!) を与えているので、ペンを取り出したら通常行うことは何もできません。 なぜそれは空ですか? それが問題です – 今朝家を出るときにペンを手に取るのを忘れたのかもしれませんし、昨夜脱いだときに昨日のシャツのポケットにペンを忘れたのかもしれません.

私たちはそこにいなかったのでわかりません。さらに重要なことに、あなたのシャツも見えず、ましてやポケットに何が入っているかもわかりません!

コンピューターに戻ると、あなたは同じことを何らかの形で行っています。そして、あなたのコードを見ることはできません。
しかし、それは可能です。ここでは、Visual Studio が役に立ちます。 デバッガーでプログラムを実行し、失敗すると、問題が見つかった行が表示されます。 次に、そのさまざまな部分を調べて、どの値が null であるかを確認し、コードを振り返ってその理由を見つけることができます。 したがって、エラー行を含むメソッドの先頭にブレークポイントを置き、プログラムを最初からもう一度実行します。 今回は、デバッガーはエラーが発生する前に停止し、コードをステップ実行して値を確認することで、何が起こっているかを調べることができます。

しかし、それはできません – 私たちはあなたのコードを持っていません。コードを持っていたとしても、それをどのように使用するかわかりません。あなたのデータもありません。 試してみて、どれだけの情報が得られるか見てみましょう!

[ad_2]

コメント

タイトルとURLをコピーしました