上传无法正常工作,提供有关文件类型的错误消息

时间:2013-12-09 16:23:48

标签: c# asp.net .net upload

我有一个Web控件,后端代码用于将文件上传到服务器(在测试环境中,解决方案的文件夹)

我正在使用的错误消息包括“不是DOCX”和“文件大小太大”,目前控件没有上传文件,只输出“不是DOCX”。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace FileUpload
{
    //this backend for the web control will be used to upload a file that will have it's XML tags pulled and displayed on a page. 
    //this code checks if the fileupload control has input inside it, then proceeds to the next page with the document saved.
    public partial class UploadFileControl : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        //names the script manager which will be used when the user attempts to upload a form / gives an error if they incorrectly attempt to upload
        protected void UploadButton_Click(object sender, EventArgs e)
        {
            //if file is located
            if (FileUploadControl.HasFile)
            {
                try
                {
                    //allow content type of document / docx
                    if (FileUploadControl.PostedFile.ContentType == "document/docx")
                    {
                        //if the file is is less than 51mb
                        if (FileUploadControl.PostedFile.ContentLength < 2000)
                        {
                            //name the filename, find the path of the name
                            string filename = Path.GetFileName(FileUploadControl.FileName);
                            //path of server upload (we just need to save it as a variable to be found on the next page, as it will be made / deleted
                            FileUploadControl.SaveAs(Server.MapPath("~/") + filename);
                            //update the label with file uploaded
                            StatusLabel.Text = "Upload status: File uploaded!";
                            //move onto template wizard page
                            Response.Redirect("sitename.com", false);

                            //will be used to grab the document string
                            return;

                        }
                        else
                            //display the size the file needs to be less than
                            StatusLabel.Text = "Upload status: The file has to be less than 2mb!";
                    }
                    else
                        //tell the user only docx files are accepted
                        StatusLabel.Text = "Upload status: Only DOCX files are accepted!";
                }
                catch (Exception ex)
                {
                    //display the exception message, in which case it would be either size / type / if it's present
                    StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
                }
            }
        }
    }
}

网页控件前面..

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UploadFileControl.ascx.cs" Inherits="FileUpload.UploadFileControl" %>


<asp:FileUpload id="FileUploadControl" runat="server" />
    <asp:Button runat="server" id="UploadButton" text="Upload" onclick="UploadButton_Click" />
    <br /><br />
    <asp:Label runat="server" id="StatusLabel" text="Upload status: " />

我的网络表单

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="FileUpload.test" %>

<%@ Register Src="~/UploadFileControl.ascx" TagPrefix="uc1" TagName="UploadFileControl" %>


<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="uploadForm" runat="server">
    <div>
        <uc1:UploadFileControl runat="server" ID="UploadFileControl" />
    </div>
    </form>
</body>
</html>

3 个答案:

答案 0 :(得分:1)

使用以下文件的扩展名检查文件类型

if(Path.GetExtension(FileUploadControl.PostedFile.FileName).ToLower() ==".docx")
{
    // file type is docx.. do something 
}
else
    StatusLabel.Text = "Upload status: Only DOCX files are accepted!";

答案 1 :(得分:1)

似乎DOCX内容类型如下:

application/vnd.openxmlformats-officedocument.wordprocessingml.document

您可以看到here MS Office内容类型列表。

所以,你的代码应该是:

if (FileUploadControl.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
   {
      //upload
   }
   else
      StatusLabel.Text = "Upload status: Only DOCX files are accepted!";

答案 2 :(得分:1)

问题在于这行我想

 if (FileUploadControl.PostedFile.ContentType == "document/docx")

有关不同的内容类型,请参阅以下链接

http://webdesign.about.com/od/multimedia/a/mime-types-by-content-type.htm