尝试上传文件时出错

时间:2012-11-19 11:18:13

标签: c# asp.net file-upload

我有一个文件上传控件和一个按钮:

<asp:FileUpload ID="venfileupld" runat="server" />
<asp:Button ID="venupld1" runat="server" Text="Upload" OnClick="venupld1_Click" />

在按钮点击事件中,我这样做:

string name = venfileupld.PostedFile.FileName;

    string filepath = Server.MapPath("upload_excel/") + name;
    venfileupld.PostedFile.SaveAs(filepath);

 writetoven();

但它给了我一个错误。

我的第一个问题是我收到错误的原因:

string name = venfileupld.PostedFile.FileName;

如果上传者没有任何文件,则为空。

第二个问题是我如何获得可以传递名为

的函数的文件
 writetoven();

任何帮助?

4 个答案:

答案 0 :(得分:1)

在将文件名分配给变量“name”之前,您必须通过其属性“HasFile”检查上传控件是否有文件,您可以从以下链接中看到最佳示例: http://asp-net-example.blogspot.in/2008/10/fileupload-control-example.html

答案 1 :(得分:0)

首先,请确保您在表单标记中使用enctype=multipart/form-data。这将允许将文件上传控件发布到asp.net服务器,您将开始在venfileupld.PostedFile对象和其他属性中接收数据。

使用venfileupld.HasFilevenfileupld.ContentLength属性确保文件已上传且不是0kb。

- 更新 -

根据您使用更新面板的事实,您可以尝试添加回发触发器,例如

 <Triggers>
  <asp:PostBackTrigger ControlID="btnUploadControlId" />
 </Triggers>

-----更新结束----

如果这不能解决您的问题,请添加更多详细信息。

答案 2 :(得分:0)

  

您是否将ASP.NET Ajx与UpdatePanel一起使用?   ...   是的我正在使用ajax和updatepanel

FileUploadUpdatePanel内无效。您必须使用AsyncFileUpload中的ASPNET AJAX control Toolkit

点击此处了解更多详情:http://knowledgebaseworld.blogspot.de/2009/02/file-upload-not-working-with-update.html

您应该处理UploadedComplete控件的AsyncFileUpload事件:

private static List<string> allowedExtensions = new List<string>(new string[] {
".xls",
".xlsx"
});

protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    if (e.state == AjaxControlToolkit.AsyncFileUploadState.Success) {
        string fileExt = System.IO.Path.GetExtension(e.filename);
        if (allowedExtensions.Contains(fileExt)) {
            string fileName = System.IO.Path.GetFileName(e.filename);
            string dir = Server.MapPath("upload_excel/");
            string path = Path.Combine(dir, fileName);
            AsyncFileUpload1.PostedFile.SaveAs(path);
            AsyncFileUpload1.FileContent.Close();
        } else {
            // wrong extension
        }
    } else {
        // log and show error
    }
}

答案 3 :(得分:0)

尝试以下:

代码背后:

protected void venupld1_Click(object sender, EventArgs e)
    {
        string name = venfileupld.FileName;
        string filepath = Server.MapPath("~/upload_excel/") + name;
        venfileupld.PostedFile.SaveAs(filepath);
     }

代码内联:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"  UpdateMode="conditional">
    <ContentTemplate>
    <asp:FileUpload ID="venfileupld" runat="server" />
    <asp:Button ID="venupld1" runat="server" Text="Upload" OnClick="venupld1_Click" />
    </ContentTemplate>
    <Triggers>
    <asp:PostBackTrigger ControlID="venupld1" />
    </Triggers>
 </asp:UpdatePanel>

希望这有帮助。