如何将图像上传到Web APP(ASP.NET)并保存以进行处理?

fivyi3re  于 2023-02-06  发布在  .NET
关注(0)|答案(1)|浏览(128)

我正在尝试使用www.example.com创建一个Web应用程序asp.net(尝试获得一些知识,以便以后开发更高级的东西)。我正在尝试创建的应用程序需要上传一张图片,然后对它进行一些处理。现在的问题是,我可以让用户上传这张图片,在页面上显示它,并暂时保存在某个地方进行处理,而不使用数据库吗?
尝试通过YouTube和网络查找,但无法找到任何特定文档。

ccgok5k5

ccgok5k51#

天啊,我不明白数据库有什么重要的?
如果你没有一个数据库,这不应该影响你可以只是下降在一个文件加载程序,上传文件到某个文件夹,然后显示文件的列表已被上传.你是100%的自由,然后处理这些文件被拖到该文件夹,对不对?
所以,让我们在一个文件加载程序下降(您可以选择/使用一个"gazillion"这样的加载程序,或使用一个简单的文件加载控件。
在该控件的正下方,然后放入一个网格视图,以显示上载到该文件夹中的文件。
所以,假设这个标记:

<asp:RadioButtonList ID="RadioButtonList1" runat="server" height="40px"
    RepeatDirection="Horizontal" CssClass="rMyChoice"  ClientIDMode="Static"
    AutoPostBack="true" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
    <asp:ListItem Selected="True">Upload Files</asp:ListItem>
    <asp:ListItem>My Files</asp:ListItem>
</asp:RadioButtonList>
<br />

<div id="uploadfiles" runat="server" style="width:550px">
    <ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" runat="server" 
        OnUploadComplete="AjaxFileUpload1_UploadComplete" 
        OnClientUploadCompleteAll="AllDone" />
</div>

<div id="myfiles" runat="server" style="width: 700px">
<asp:GridView ID="GridFiles" runat="server"
    AutoGenerateColumns="False" ShowHeaderWhenEmpty="true" CssClass="table table-hover" >
    <Columns>
        <asp:BoundField DataField="FileName" HeaderText="FileName" />
        <asp:BoundField DataField="Created" HeaderText="UpLoaded" />
        <asp:BoundField DataField="Size" HeaderText="Size" />
        <asp:TemplateField HeaderText="Preview">
            <ItemTemplate>
                <asp:Image ID="Image1" runat="server" Width="120px"
                    ImageUrl='<%# "UpLoadFiles/" + Eval("FileName") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Download" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <asp:Button ID="cmdDownLoad"
                    runat="server" Text="Download" CssClass="btn"
                    OnClick="cmdDownLoad_Click"
                    CommandArgument='<%# Eval("FileName") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<br />
</div>

我使用的是ajaxtoolkit上传器,但这在这里并不重要。
然后在上传器下面,我只是在一个网格视图中放置,以显示上传后的文件。
见鬼,还不如使用一个选项卡控件,或者一个简单的单选按钮列表,这样用户就可以查看文件,或者上传更多的文件。
所以,上面,我有这个代码背后:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    RBShow()

End Sub

Sub LoadGrid()

    Dim rstFiles As New DataTable

    rstFiles.Columns.Add("FileName")
    rstFiles.Columns.Add("Created", GetType(DateTime))
    rstFiles.Columns.Add("Size")

    Dim sFolder As String = "~/UpLoadFiles"
    Dim MyFolder As New DirectoryInfo(Server.MapPath(sFolder))

    Dim MyFileList() As FileInfo = MyFolder.GetFiles("*.*")

    For Each OneFile As FileInfo In MyFileList
        Dim OneRow As DataRow = rstFiles.NewRow
        OneRow("FileName") = OneFile.Name
        OneRow("Created") = OneFile.CreationTime.ToString("G")
        OneRow("Size") = OneFile.Length
        rstFiles.Rows.Add(OneRow)
    Next

    GridFiles.DataSource = rstFiles
    GridFiles.DataBind()

End Sub

Protected Sub RadioButtonList1_SelectedIndexChanged(sender As Object, e As EventArgs)

    RBShow()

End Sub

Sub RBShow()

    ' routine to hide and show a div based on radio button (this is our fake tab control)

    If RadioButtonList1.SelectedIndex = 0 Then

        uploadfiles.Style.Add("Display", "normal")
        myfiles.Style.Add("Display", "none")
    Else
        LoadGrid()
        uploadfiles.Style.Add("Display", "none")
        myfiles.Style.Add("Display", "normal")

    End If

End Sub

文件上传器有一个up-load file complete事件,代码如下:

Protected Sub AjaxFileUpload1_UploadComplete(sender As Object, e As AjaxControlToolkit.AjaxFileUploadEventArgs)

    Dim sFile As String = Server.MapPath("~/UpLoadFiles/") & e.FileName

    AjaxFileUpload1.SaveAs(sFile)

End Sub

所以,当我们运行页面时,我们会得到这个:

所以,既然你没有一个数据库-不需要一个!
然后加载一个网格视图,或者列表框,或者任何带有文件列表的东西,这些文件来自你保存所有正在加载的文件的文件夹。
当然在上面,我有一个下载按钮。
代码如下所示:

Protected Sub cmdDownLoad_Click(sender As Object, e As EventArgs)

    Dim myBut As Button = sender
    Dim strFileOnly As String = myBut.CommandArgument
    Dim strFile As String = ""
    strFile = Server.MapPath("~/UpLoadFiles/" + strFileOnly)

    Dim sMineType As String = MimeMapping.GetMimeMapping(strFileOnly)

    Response.ContentType = sMineType
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + strFileOnly)
    Response.TransmitFile(strFile)
    Response.End()

End Sub

因此,这些文件仍在该文件夹中以供"以后"处理。
更棒的是,如果你回到页面,你可以"查看"已经上传的文件列表,或者上传更多的文件。
所以,根本不清楚为什么需要数据库。那些文件只是坐在一个文件夹里。
然后,您可以处理这些文件,例如,当完成时,移动到另一个名为MyProcessed的文件夹。
然后,您可以自由地上载更多的文件进行处理,这些文件将驻留在MyUpLoads文件夹中。

相关问题