如何使用C#从服务器上传和下载文件

时间:2009-11-21 11:37:33

标签: c# asp.net file-upload download

我正在开发一个网页,用户可以下载他们的Resume for Edit。所以我有一个下载文章的链接。我使用以下代码进行下载。

DataTable dt = user.getUserDetails(2);
user.WriteFileFromDBbyUserArticleID(Server.MapPath(Convert.ToString(dt.Rows[0].ItemArray[0])), Convert.ToInt32(2), "CV");
FileUtil.writeFileToResponse(Server.MapPath(Convert.ToString(dt.Rows[0].ItemArray[0])), Response);

////////////////////////////////////////////////
public void WriteFileFromDBbyUserArticleID(string FilePath, int UserID, string FileType)
{
    DataAccessLayer dal = new DataAccessLayer();

    string selectQuery = "Select Articles.Users_WriteFileFromDB(?,?,? ) from Articles.Users";

    DbParameter[] parm = new DbParameter[3];
    parm[0] = dal.GetParameter();
    parm[0].ParameterName = "@FilePath";
    parm[0].Value = FilePath;

    parm[1] = dal.GetParameter();
    parm[1].ParameterName = "@UserID";
    parm[1].Value = UserID;

    parm[2] = dal.GetParameter();
    parm[2].ParameterName = "@FileType";
    parm[2].Value = FileType;

    DataTable dtArticleStatus = dal.ExecuteDataTable(selectQuery, parm);
}

///////////////////////////////////////////////////////////////////////////
static public void writeFileToResponse(string filePath,HttpResponse Response)
{
    try
    {
        string FileName = Path.GetFileName(filePath);
        Response.Clear();
        Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName);
        Response.WriteFile(filePath);
        Response.Flush();
        File.Delete(filePath);
        Response.End();
    }
        catch (System.Exception ex)
    {
    }
}

我在“Response.WriteFile(filePath);”行中收到错误如下

  

sys.webforms.pagerequestManagerparserErrorException:无法解析从服务器收到的消息。此错误的常见原因是通过调用response.write(),响应过滤器,httpModule或服务器跟踪来修改响应。   详细信息:解析附近时出错......

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

public class FileHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        if (context.Request["file"] != null)
        {
            try
            {
                string file = context.Server.MapPath("~/files/" + context.Request["file"].ToString());
                FileInfo fi = new FileInfo(file);
                if (fi.Exists)
                {
                    context.Response.ClearContent();
                    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fi.Name);
                    context.Response.AddHeader("Content-Length", fi.Length.ToString());
                    string fExtn = "video/avi";
                    context.Response.ContentType = fExtn;
                    context.Response.TransmitFile(fi.FullName);
                    context.Response.End();
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
    }

    public bool IsReusable
    {
        get { return true; }
    }
}

答案 1 :(得分:0)

您可以使用Response stream流回文档。

这可能会让你前进。

Response

Request, Response Objects

答案 2 :(得分:0)

您使用的是ASP.NET吗?尝试使用HtmlInputFile进行上传。

http://www.codeproject.com/KB/aspnet/fileupload.aspx

答案 3 :(得分:0)

要上传文件,您可以使用asp:FileUpload控件和简单使用SaveAs方法。但请注意,如果将其与部分更新对象(asp:UpdatePanel)结合使用,则必须设置触发器。如果您不使用触发器asp:FileUpload,可以重置控件...