aspx.net 上传文件到服务器端

aspx.net uploading files to a server side

我有 2 页。一页发送一个 ID 号,我稍后将使用它从数据库上传数据。

我通过url-location += "fileUploadPage.aspx?"+ ID"发送这个身份证号码。 然后我需要在该页面的服务器端上传文件。我需要表单不重新加载页面,因为它正在删除我的 URL 扩展名。 我考虑过使用 sessionStorage - 但我觉得它对我来说更好,因为用户可以为不同的项目打开多个选项卡以将文件上传到。

将文件上传到服务器端后 - 我还需要将其转换为 PDF。 几天来我一直在尝试这样做,但我无法修复它。

我设法将文件从表单上传到服务器端文件夹,但我无法拒绝重新加载页面。 当我拒绝重新加载页面时,服务器端功能没有执行。另外,我转成PDF失败了。

我在服务器端使用 aspx.net c#。 遗憾的是我不能分享原始代码,因为它在一个封闭的地方,但我在我的本地电脑上做了一个演示:

有什么建议吗?我是处理文件领域的新手——以前从未做过。任何关于重构我的代码或我如何移动 ID 的建议都非常受欢迎。

输入的数字也是我需要添加到我的文件名中的文本 将其转换为 PDF 后。

<form id="myForm" name="myForm" action="FilesProblemPage.aspx" runat="server" style="margin-top: 20px;">
        <select id="Number" runat="server">
            <option value="3">333333333</option>
            <option value="2">222222222</option>
        </select>

        <label runat="server">
            click me to choose a file
            <input id="uploadFile" name="uploadFile" style="visibility: hidden" type="file" runat="server" />
        </label>

        <p id="ChosenFile">no file selected</p>
        <asp:Button ID="uploadButton" runat="server" Text="Upload" type="button"
            OnClick="uploadButton_Click" BorderStyle="None" CssClass="button" />
    </form>



 let makat = location.href.split("?")[1];
            if (makat == 44459999) {
                $("#makat").val("workssss");
                $(".checkingTemp")[0].checked = true;
                $(".checkingTemp")[1].checked = true;
            }

            $("#body_uploadFile")[0].addEventListener("change", function (e) {
                console.log($("#body_uploadFile")[0].files);
                if ($("#body_uploadFile")[0].files[0] != undefined)
                    $("#ChosenFile").text($("#body_uploadFile")[0].files[0].name);
                else
                    $("#ChosenFile").text("no file chosen");

            })

服务器端: 添加:

using System.IO;
protected void uploadButton_Click(object sender, EventArgs e)
{
    if (uploadFile.PostedFile != null && uploadFile.PostedFile.ContentLength > 0)
    {
        string fileName = Path.GetFileName(uploadFile.PostedFile.FileName);
        string folder = Server.MapPath("~/TempFiles/");
        Directory.CreateDirectory(folder);
        uploadFile.PostedFile.SaveAs(Path.Combine(folder, fileName));

        try
        {
            Response.Write("<script>alert('operation success')</script>");
           
        }
        catch
        {
            Response.Write("<script>alert('operation failed')</script>");
        }
    }
}

好吧,您仍然可以使用 session() 来传递 ID,但是在第一个页面加载时(在下一页上,您将该 ID 保存到 ViewState 中。这样,即使它们有多个页面也没有关系打开因为当他们跳到下一页时,然后在第一页加载 IsPostBack = false,然后你转移到 ViewState。

ViewState 是每个网页的,因为 session() 是全局的。因此,通过会话传递 id,下一页的第一件事是将值传输到 ViewState。

然而,仅使用一个简单的 FileUpLoad 控件的问题是它们并不是那么好,如果文件较大,那么在 up-load 期间您不会取得任何进展。

出于这个原因,我倾向于在文件上传上付出一些真正的努力。 (因为这对开发人员来说是一种痛苦,而且通常对用户来说也是如此)。这方面有很多选择,但我在我的项目中使用了 AjaxToolKit,因此采用了那个。

因此,用户可以拖放文件或 select 个文件,然后点击 up-load 按钮。

AjaxToolKit up-loader 看起来像这样:

因此,用户可以 select 一堆文件 - 删除它们,做任何事情。

然后他们可以点击 up-load 按钮。

每个文件上传 - 带有进度条。然后在 up-loading 之后,我显示上传的文件。

例如:

而 up-loader 的另一个优点是没有真正的文件大小限制 - 它以小块的形式上传。

所以,这真的取决于你想要多花哨,但有很多“up-loader”的例子,甚至还有一些 jquery + JavaScript挺好的

如建议的那样,如果您不使用 AjaxControl 工具包,那么您可以考虑它(它有点过头了 - 但该工具包确实有很多其他不错的功能)。

如前所述,您可能希望至少使用一个 asp.net FileUpload 控件,但这取决于您在这里寻找的文件数量、大小以及 UI 的类型?