none
關於WebClinet及HttpPostedFile RRS feed

  • 問題

  • 我想藉由console程式將檔案藉由httpostfile方式傳遞到asp網頁處理

    但傳遞時產生錯誤 產生WebClientException

    我擷取了錯誤狀態是未知 (unknow)

    不太理解哪邊可能出現問題

    能否進各位先進們 告知小弟哪邊有錯誤了

     Conosle Code

    static void Main(string[] args)
            {
                Console.WriteLine(DateTime.Now.ToString("yyyyMMdd"));
                WebClient wc = new WebClient();
                String uri = @"http://localhost:51634/lihpao/Default.aspx";
                String loacalfile = "\\test.txt";
                try
                {
                    byte[] response = wc.UploadFile(uri, loacalfile);
                }
                catch (WebException e)
                {
                    Console.WriteLine("This program is expected to throw WebException on successful run." +
                           "\n\nException Message :" + e.Message);
                    Console.WriteLine(e.Status);
                              }
                Console.Read();
            }
    Asp.aspx code
    protected void Page_Load(object sender, EventArgs e)
        {
            foreach (string f in Request.Files.AllKeys)
            {
                HttpPostedFile file = Request.Files["f"];
                file.SaveAs("c:\\test\\" + file.FileName);
            }
        }

    2013年7月23日 上午 07:33

解答

  • 1. 你搞錯了 我說的是磁碟所在的根目錄 而不是 exe 所在的目錄 也就是說 C:\test.txt 或 D:\test.txt

        如果還是不懂 在 string localfile = "\\test.txt"; 後面 多加一行 Console.WriteLine("Path:{0}", Path.GetFullPath(loacalfile));

    2. 你 Default.aspx.cs 也寫錯了   應該是 HttpPostedFile file = Request.Files[f];

     

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 ChuangMaster 2013年7月23日 下午 03:47
    2013年7月23日 下午 12:53
  • 開發ASP.NET網頁的人,要會看事件檢視器,會把錯誤訊息及行號寫到應用程式那邊去...


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 ChuangMaster 2013年7月23日 下午 03:47
    2013年7月23日 下午 01:31

所有回覆

  • 您好,已修正為

    byte[] response = wc.UploadFile(uri,"post", loacalfile);

    問題依然存在

    2013年7月23日 上午 08:40
  • 你 c:\  有寫入權限?

    file.SaveAs("c:\\test\\" + file.FileName);

    用 Server.MapPath() 去取得網站路徑試試。


    理直氣和,切記。

    Blog: http://blog.kkbruce.net

    Book:《ASP.NET MVC 4 網站開發美學

    2013年7月23日 上午 08:55
  • 有的,我在test資料夾已經給了讀寫權限
    嘗試修正儲存位置 也給定upload的寫入權限

    file.SaveAs(Server.MapPath(@"~\upload\"+file.FileName) );

    問題仍然尚未解決



    • 已編輯 ChuangMaster 2013年7月23日 上午 09:34 修正code
    2013年7月23日 上午 09:07
  • 你console application 所在磁碟的根目錄(Ex: C:\ 或 D:\) 下有 test.txt 這個檔案嗎?

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度


    • 已編輯 Alex_Lee 2013年7月23日 下午 12:19 修改錯字
    2013年7月23日 下午 12:18
  • 我檢查過了

    Bin/debug 內是有txt的

    2013年7月23日 下午 12:39
  • byte[] response = wc.UploadFile("URL", "POST", "test.txt");
    string s = System.Text.Encoding.ASCII.GetString(response);
    Console.WriteLine(s);
    把s 輸出看看是什麼訊息。

    理直氣和,切記。

    Blog: http://blog.kkbruce.net

    Book:《ASP.NET MVC 4 網站開發美學

    2013年7月23日 下午 12:46
  • 1. 你搞錯了 我說的是磁碟所在的根目錄 而不是 exe 所在的目錄 也就是說 C:\test.txt 或 D:\test.txt

        如果還是不懂 在 string localfile = "\\test.txt"; 後面 多加一行 Console.WriteLine("Path:{0}", Path.GetFullPath(loacalfile));

    2. 你 Default.aspx.cs 也寫錯了   應該是 HttpPostedFile file = Request.Files[f];

     

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 ChuangMaster 2013年7月23日 下午 03:47
    2013年7月23日 下午 12:53
  • 開發ASP.NET網頁的人,要會看事件檢視器,會把錯誤訊息及行號寫到應用程式那邊去...


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 ChuangMaster 2013年7月23日 下午 03:47
    2013年7月23日 下午 01:31
  • Alex_Lee :

    謝謝您,我懂檔案路徑的意思了! 的確我放錯地方了

    至於aspx.cs 

    HttpPostedFile file = Request.Files[f];

    我好像寫的跟你是相同的

    我找到錯誤點了!  索引值地方錯了"f"

    當我路徑修正後 傳回錯誤訊息

    遠端伺服器傳回一個錯誤: (500) 內部伺服器錯誤。

    心冷熱情熄:

    謝謝心冷前輩,由於我是剛入門,手頭上的入門書也沒有提到這東西,謝謝告訴我這個工具! 

    根據這個我找尋到問題 似乎是出在aspx的程式上頭

    錯誤訊息

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

    問題出在

    HttpPostedFile file = Request.Files["f"];

    file是NullReferenceException

    ------------------------------------

    問題已經解決了!!!

    應修正為

    HttpPostedFile file = Request.Files[f];

    再次感謝兩位前輩!! 


    • 已編輯 ChuangMaster 2013年7月23日 下午 03:47 解決問題
    2013年7月23日 下午 03:27
  • 你原本是寫這樣:

    protected void Page_Load(object sender, EventArgs e)
        {
            foreach (string f in Request.Files.AllKeys)
            {
                HttpPostedFile file = Request.Files["f"];
                file.SaveAs("c:\\test\\" + file.FileName);
            }
        }

    f是被雙引號括住的


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2013年7月23日 下午 03:42