none
C# MVC 檔案上傳 下載 讀資料庫問題 RRS feed

  • 問題

  • Service:

            //宣告資料庫模組
            public WebApplication1.Models.FinalProjectEntities1 db = new Models.FinalProjectEntities1();


            public List<Meeting> GetFileList()
            {
                return (db.Meeting.ToList());
            }


            #region 取得單一檔案資料路徑方法
            //取得單一檔案資料路徑方法
            public Meeting GetFileContent(int MeetingNum)
            {
                //根據傳入編號取得檔案資料
                Meeting GetFile = db.Meeting.Find(MeetingNum);
                return GetFile;
            }
            #endregion

    Controller:

            #region 下載檔案
            //下載檔案用的action
            public ActionResult DownloadFile(int MeetingNum)
            {
                //取得 下載檔案內容資料
                Meeting Download = fileService.GetFileContent(MeetingNum);
                //判斷是否有資料
                if(Download != null)
                {
                    //將檔案讀成串流
                    Stream iStream = new FileStream
                        (Download.Url, FileMode.Open, FileAccess.Read, FileShare.Read);
                    //回傳出檔案
                    return File(iStream, Download.MeetingFile, Download.MeetingName);
                }
                else
                {
                    return JavaScript("alert(\"無此檔案\")");
                }
            }
            #endregion

    Model:

      public List<Meeting> MeetingFileList { get; set; }

    View:


                        @if (!Model.MeetingFileList.Count.Equals(0))
                       {
                            foreach (var item in Model.MeetingFileList)
                            {
                                <tr>
                                    <td>
                                        @item.MeetingName
                                    </td>
                                    <td>
                                        @Html.ActionLink("下載檔案" , "DownloadFile" , new { MeetingNum = item.MeetingNum })
                                    </td>
                                </tr>
                            }
                      }

    各位大大 請問我在偵錯之後 他停在
    View  @if (!Model.MeetingFileList.Count.Equals(0)) 這一行

    "並未將物件參考設定為物件的執行個體"

    我爬文 是說有的回傳是空值  或者有東西沒有new到

    但我程式能力不是很好 這是我跟我朋友在練習的程式上傳

    檢查了幾遍 實在試看不出哪裡有問題

    請各位高手指點迷津 謝謝

    2016年8月18日 上午 07:10

解答

  • Controller中名稱為MeetingUploadIndex的函式有傳入內容為集合的參數給View顯示嗎? 像這樣:

    return View(MeetingFileList集合);

    2016年8月22日 上午 06:13
  • 這樣會有資料才有鬼...

    return View(GetFileList());


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年8月23日 上午 10:08
    版主

所有回覆

  • 判斷資料筆數是否為0, 程式可以這樣寫

    @if (Model.MeetingFileList.Count() != 0)

    2016年8月18日 上午 07:20
  • 不好意思 他跑出另一種例外狀況:

    "值不能為 null。\r\n參數名稱: source"

    不過這個我看不懂...是什麼意思耶

    請問您知道這個是什麼狀況嗎?

    2016年8月18日 上午 08:33
  • @if (!Model.MeetingFileList.Count.Equals(0))

    改成

    @if (Model != null && Model.MeetingFileList != null && Model.MeetingFileList.Any())

    試試


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年8月18日 上午 09:16
    版主
  • 我換了 沒有顯示另外狀況 但是也沒有列出

    資料庫裡檔案名稱並有 超連結提供下載

    就是 @if (Model != null && Model.MeetingFileList != null && Model.MeetingFileList.Any())

    這一行{}裡面的東西 顯示不出來...

    2016年8月18日 上午 10:56
  • 你的 Controller 有把 Model 傳給 View 嗎?

    我沒看到你這部份的程式。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年8月18日 上午 11:01
    版主
  • 您可以檢查看看MeetingFileList是否為空值(null)
    2016年8月19日 上午 01:29
  •         #region 取得單一檔案資料路徑方法
            //取得單一檔案資料路徑方法
            public Meeting GetFileContent(int MeetingNum)
            {
                //根據傳入編號取得檔案資料
                Meeting GetFile = db.Meeting.Find(MeetingNum);
                return GetFile;
            }
            #endregion 

    請問是service這一段 嗎?

    controller 有一段呼叫service Meeting Download = fileService.GetFileContent(MeetingNum);

    這樣是否就是呼叫了呢?


    2016年8月20日 上午 11:22
  • 都有數值耶

    我也成功可以上傳寫進資料庫跟指定資料夾

    但就是無法列表然後下載檔案

    2016年8月20日 上午 11:22
  • 請貼出錯誤畫面

    2016年8月20日 下午 12:17
  • https://www.facebook.com/photo.php?fbid=10205115297200678&set=a.1344664195282.42900.1791585471&type=3&theater

    不好意思我帳戶沒有驗證 無法PO圖片

    2016年8月20日 下午 01:17
  • 把你的 Controller 的程式貼出來....


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年8月20日 下午 02:27
    版主
  • Controller中名稱為MeetingUploadIndex的函式有傳入內容為集合的參數給View顯示嗎? 像這樣:

    return View(MeetingFileList集合);

    2016年8月22日 上午 06:13
  •   public class FileController : Controller
        {
            MeetingUploadFileService fileService = new MeetingUploadFileService();
            private FinalProjectEntities1 db = new FinalProjectEntities1();

     public ActionResult MeetingUploadIndex()
            {

             return View();

            }

     #region 上傳檔案
            //上傳檔案用的action
            [HttpPost] //設定此action 只接受頁面POST的回傳值
            public ActionResult UploadFile(HttpPostedFileBase upload)
            {
                //檢查是否有上傳檔案
                if (upload != null)
                {
                    //將檔案與伺服器路競合併
                    string Url = Path.Combine(Server.MapPath("~/Upload/"), upload.FileName);
                    //將檔案儲存於伺服器上
                    upload.SaveAs(Url);
                    //藉由service將檔案資料存入資料庫
                    fileService.UploadFile(upload.FileName, Url, upload.ContentType);
                }
                //重倒回首頁
                return RedirectToAction("MeetingUploadIndex");
            }
            #endregion



            #region 下載檔案
            //下載檔案用的action
            public ActionResult DownloadFile(int MeetingNum)
            {
                //取得 下載檔案內容資料
                Meeting Download = fileService.GetFileContent(MeetingNum);
                //判斷是否有資料
                if(Download != null)
                {
                    //將檔案讀成串流
                    Stream iStream = new FileStream
                        (Download.Url, FileMode.Open, FileAccess.Read, FileShare.Read);
                    //回傳出檔案
                    return File(iStream, Download.MeetingFile, Download.MeetingName);
                }
                else
                {
                    return JavaScript("alert(\"無此檔案\")");
                }
            }
            #endregion

    2016年8月23日 上午 07:08
  • 回tihs

    我那部分只有這樣

      public ActionResult MeetingUploadIndex()
            {          
                return View();
            }

    2016年8月23日 上午 07:08
  • 這樣會有資料才有鬼...

    return View(GetFileList());


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年8月23日 上午 10:08
    版主
  • 原來我沒有從Model抓值到controller 我解決了 感謝各位
    2016年8月26日 下午 02:59