【问题标题】:How to upload and download file from a server using C#如何使用 C# 从服务器上传和下载文件
【发布时间】:2013-05-06 19:52:08
【问题描述】:

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

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()、响应过滤器、httpModules 或启用了服务器跟踪来修改响应。 详情:附近解析出错...

我该如何解决这个问题?

【问题讨论】:

  • 那么究竟是什么问题?
  • 应该有信誉分数,可以让你投票给用户,我会投票给 Sakthivel。
  • 关闭?我该怎么做才能避免?

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


【解决方案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; }
    }
}

【讨论】:

    【解决方案2】:

    您可以使用响应流将文档流回。

    这可能会让你继续前进。

    Response

    Request, Response Objects

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 嗯,由于这个问题有点令人困惑,所以我主要是按标题来的,但再读一遍似乎你可能是对的。无论哪种方式,将这个答案留在这里都会帮助从标题中找到这个问题的其他用户。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-20
        • 2013-09-22
        • 2023-02-03
        • 2019-01-09
        • 1970-01-01
        • 2015-05-23
        • 2013-08-03
        • 2020-05-14
        相关资源
        最近更新 更多