2016-07-08 4 views
-2

を使用して特殊文字でファイルをダウンロードしています。私の既存のアプリケーションでは、ファイル名のようにファイル名がZahed's.docのSQLデータベーステーブルにアップロードされています。このファイルをダウンロードしようとすると、ファイル名にが含まれているため、ダウンロードできません。ASP.NET C#Webフォーム

以下

は私のアップロード設計コードです:

<asp:FileUpload ID="FileUpload1" runat="server" CssClass="textfield_new1" /> 

私のアップロードは.csコード:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
<asp:LinkButton ID="lnkbtn_ResumeUpload" runat="server" CssClass="cv_heading" OnClick="lnkbtn_ResumeUpload_Click"></asp:LinkButton> 
</ContentTemplate> 
</asp:UpdatePanel> 

ボタンクリックDowloading用:以下

bo.Para21 = FileUpload1.FileName.ToString();//ResumePath 
string FinalFileName = Convert.ToString(Sno) + bo.Para21; 
FileUpload1.PostedFile.SaveAs(Request.ServerVariables["APPL_PHYSICAL_PATH"] + "Resumes/" + FinalFileName); 

私のダウンロードファイルの設計コードでありますコード:

protected void lnkbtn_ResumeUpload_Click(object sender, EventArgs e) 
{ 
    string path = lnkbtn_ResumeUpload.Text; 

    string ResumePath = System.Configuration.ConfigurationManager.AppSettings["ResumePath"].ToString(); 

    System.Web.UI.ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "SCRIPT", "window.open('"+ResumePath+path + "')", true); 

} 

私の問題はすでに800人のユーザーがファイル名でアップロードされており、このタイプの問題を解決するには、そのアプリケーションをダウンロードできません。

答えて

0

問題は、それが可能になるため、生成されるJavaScriptが破壊されるということです。

window.open('...Zahed's.doc'); 

だから、「-character、スクリプトを中断します。そして、なぜ我々は\を使用しているあなたは上記の質問のコードに従ってを更新することができます

System.Web.UI.ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "SCRIPT", "window.open(\"" +ResumePath + path + "\")", true); 
+0

と私がチェックし、更新されます。最も簡単な解決策は、ウィンドウのオープン部分にあなたのコード内で "と"交換することです@Esko – zahed

+0

「文字列の中に-characterが必要な場合は、\ c# – Esko

+0

でエスケープする必要があります。こんにちはEskoこのファイル名に別の問題があります:[email protected]_In_zahed's resume'.docがダウンロードされていません。確認して確認してください。 @エスコ – zahed

2

(HttpUtility.UrlEncodeを使用して、ファイル名をエンコードするようにしてください)

https://msdn.microsoft.com/en-us/library/4fkewx0t.aspx

例: あなたのファイルパスが「パス」と呼ばれている場合は、JavaScriptにそれを送信した後、最初にそれをエンコードする必要があります。

string filePath = HttpUtility.UrlEncode(path); 

System.Web.UI.ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "SCRIPT", "window.open('"+ filePath + "')", true); 

別の解決策は、アポストロフィが含まれている完全にあなたのjavascriptの文字列をエンコードHttpUtility.JavaScriptStringEncodeです。

+0

@Navid Khを – zahed

関連する問題