【问题标题】:Upload and Delete file by using File Upload Control asp.net使用文件上传控件 asp.net 上传和删除文件
【发布时间】:2013-04-08 06:29:31
【问题描述】:

我正在制定投诉表。在这个表单中,我必须创建一个上传文件的函数,然后删除上传的文件。我可以将文件上传到服务器,但我无法获取上传到服务器的文件的链接以删除它。请帮我。这是我的代码:

public string FilePath;
protected void btAdd_Click(object sender, EventArgs e)
    {          
    if (AttachFile.HasFile)
        {
            try
            {
                    string[] sizes = {"B", "KB", "MB", "GB"};
                    double sizeinbytes = AttachFile.FileBytes.Length;
                    string filename = Path.GetFileNameWithoutExtension(AttachFile.FileName);
                    string fileextension = Path.GetExtension(AttachFile.FileName);
                    int order = 0;
                    while (sizeinbytes >= 1024 && order + 1 < sizes.Length)
                    {
                        order++;
                        sizeinbytes = sizeinbytes/1024;
                    }
                    string result = String.Format("{0:0.##} {1}", sizeinbytes, sizes[order]);
                    string encryptionFileName = EncrytionString(10);                       
                    FilePath = "Path" + encryptionFileName.Trim() + AttachFile.FileName.Trim();
                    AttachFile.SaveAs(FilePath);                    
            }
            catch (Exception ex)
            {
                lbMessage.Visible = true;
                lbMessage.Text = ex.Message;
            }
        }
    } 

protected void btDelete_Click(object sender, EventArgs e)
    {
        try
        {
            File file = new FileInfo(FilePath);
            if (file.Exists)
            {
                File.Delete(FilePath);
            }
        }
        catch (FileNotFoundException fe)
        {
            lbMessage.Text = fe.Message;
        }
        catch (Exception ex)
        {
            lbMessage.Text = ex.Message;
        }
    }

【问题讨论】:

  • 当问题出现时,您能说得更具体些吗?我假设当btDelete_Click 方法被调用时,它不起作用,但是你能发布你得到的异常吗?

标签: asp.net forms file-upload


【解决方案1】:

asp.net 中的每个请求都会为您的页面创建一个新对象。
如果您在一个请求期间设置变量,它们在下一个请求中将不可用。

您的删除逻辑似乎取决于在上传期间设置的FilePath。如果您希望页面记住这一点,请将其保存在 ViewState 中。 ViewState 在对同一页面的请求之间得到维护,这将允许您在删除期间使用变量 FilePath

这可以通过将FilePath 设为属性并从 ViewState 中获取来轻松实现。

public string FilePath
{
  get
  {
    return (string) ViewState["FilePath"];
  }
  set
  {
    ViewState["FilePath"] = value;
  }
}

【讨论】:

  • nunespascal 在数据库中使用视图状态会是一个可靠的解决方案吗?
  • 兄弟那么不需要使用变量也只需将文件上传控件的hasfile属性设置为false。不需要更多的逻辑。
  • 是的,你是对的,但不需要做任何事情如果你想更改文件,文件上传控件中有一个浏览按钮,然后只需单击该按钮选择一个新文件,你就完成了。 .. 不需要一行代码。
  • 不要在 btnadd _Click 上保存文件。让它保存在提交 btn 的点击事件中。
  • 你可以做任何你想做的事......我正在管理整个博客模块,而不使用单个状态变量以及 java 脚本或 Jquery
【解决方案2】:

你应该这样做。

if (imgUpload.HasFile)
     {
                String strFileName = imgUpload.PostedFile.FileName;
                imgUpload.PostedFile.SaveAs(Server.MapPath("\\DesktopModules\\Indies\\FormPost\\img\\") + strFileName);
                SqlCommand cmd01 = new SqlCommand("insert into img (FeaturedImg) Values (@img)", cn01);
                    cmd01.Parameters.AddWithValue("@img", ("\\DesktopModules\\Indies\\FormPost\\img\\") + strFileName);
      }

使用此代码,您可以将文件上传到您网站根目录的特定位置。 并且路径将作为字符串存储在数据库中。 因此您只需使用存储在数据库中的路径即可访问该文件。 如果你什么都看不懂。或者想了解更多可以联系我或在 cmets 中问我。

【讨论】:

  • 非常感谢,我解决了我的问题:)
猜你喜欢
  • 2011-08-16
  • 2021-10-26
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
相关资源
最近更新 更多