2014-01-31 24 views
2

我是.NET的新手。當我的圖片上傳,我得到如何在.NET 3.5中設置目錄權限?

System.UnauthorizedAccessException的一個錯誤:
訪問路徑 'C:\的Inetpub \虛擬主機\ cmcnoida.com \的httpdocs \ i_image \ 123' 被拒絕。

這段代碼對本地工作非常好,但是在上面的服務器上生成的錯誤正在生成。我能做什麼?

我的代碼:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string t_sname, t_cname, t_pack, t_college, t_djoin; 

    if (TextBox2.Text == "") 
    { t_sname = "-"; } 
    else 
    { t_sname = TextBox2.Text; } 
    if (TextBox3.Text == "") 
    { t_cname = "-"; } 
    else 
    { t_cname = TextBox3.Text; } 
    if (TextBox4.Text == "") 
    { t_pack = "-"; } 
    else 
    { t_pack = TextBox4.Text + " lacs pa"; } 
    if (TextBox5.Text == "") 
    { t_college = "-"; } 
    else 
    { t_college = TextBox5.Text; } 
    if (TextBox6.Text == "") 
    { t_djoin = "-"; } 
    else 
    { t_djoin = TextBox6.Text; } 

    // conn = new SqlConnection("Data Source=USER-PC;Initial Catalog=cmcnoida;Integrated Security=True"); 
    conn = new SqlConnection("Data Source=127.0.0.1;Integrated Security=False;User ID=kvch_db;Connect Timeout=200;Encrypt=False;Packet Size=4096;Database=cmcnoida;password=kv_12_2014"); 
    //conn = new SqlConnection("server=singhal;database=abc;Trusted_Connection=yes"); 
    comm = new SqlCommand(); 
    comm.Connection = conn; 
    comm.CommandText = "select max(id) from placement"; 
    conn.Open(); 
    int i = (int)comm.ExecuteScalar(); 
    conn.Close(); 
    string a = (i + 1).ToString(); 

    DirectoryInfo dd2 = new DirectoryInfo(Server.MapPath("~\\i_image\\" + a)); 

    dd2.Create(); 
    dd2.Refresh(); 

    string fup; 
    if (FileUpload1.HasFile == true) 
    { 
     fup = "~\\i_image\\" + a + "\\" + FileUpload1.FileName; 
     FileUpload1.PostedFile.SaveAs(Server.MapPath(fup)); 
    } 
    else 
    { 
     fup = "~\\i_image\\" + a + "\\dummy-man.jpg"; 
     File.Copy(Server.MapPath("~\\admin\\dummy-man.jpg"), Server.MapPath("~\\i_image\\" + a + "\\dummy-man.jpg")); 
    } 
    comm.Connection = conn; 
    comm.CommandText = "insert into placement values('" + t_sname + "','" + t_cname + "','" + t_pack + "','" + t_college + "','" + t_djoin + "','" + fup + "')"; 
    conn.Open(); 
    comm.ExecuteNonQuery(); 
    conn.Close(); 
    // binddatagrid(); 
    TextBox2.Text = ""; 
    TextBox3.Text = ""; 
    TextBox4.Text = ""; 
    TextBox5.Text = ""; 
    TextBox6.Text = ""; 
    TextBox2.Focus(); 
    Response.Write("<script language=JavaScript> alert('Placement Record Inserted !!'); </script>"); 
} 

我應該怎麼做來解決這個問題?

+0

設置應用程序的權限*外*。除非使用模擬,否則用於ASP.NET應用程序池的帳戶可能需要寫入權限。 – user2864740

回答

0

如果您在您的服務器上託管此項,您需要在該文件夾上設置權限。這裏是一個很好的閱讀What are all the user accounts for IIS/ASP.NET and how do they differ?

但我懷疑這不是這種情況。我認爲你在這裏的共享環境中託管它。
如果是這種情況,則無法使用代碼設置服務器文件夾安全權限。所以你必須聯繫你的託管服務提供商,並要求他們授予i_image文件夾的權限。

我提到了i_image文件夾,因爲子文件夾123在您的代碼中看起來是動態的。設置根文件夾的權限就足夠了。

0

在許多涉及訪問安全性的情況下,您需要使用ASP.NET模擬(作爲Windows用戶帳戶運行)。然後您需要在web.config中進行一些更改。

<configuration> 
    <system.web> 
    <identity impersonate="true"/> 
    </system.web> 
</configuration> 

<identity impersonate="true" userName="DOMAIN\UserName" password="***" /> 

您需要提供對要寫入的文件夾具有寫入權限的用戶憑據。

這些設置也可以在應用程序池的IIS中完成。