我正在为我的大学建立一个在线考试试卷目录。学生可以选择年份,然后选择他们想要查看论文的课程,这一切都已完成。我不知道如何让他们下载论文。选择课程后,所有相关论文都会以超链接的形式显示,点击后可以查看或下载论文如何进行此操作?我正在考虑使用ftp服务器(drivehq
具体)和asp.net
网站,但我找不到好的教程。所有教程都展示了如何下载单个特定文件而不是多个文件。我是否必须为我服务器上的每个文件编码?有更好的方法吗?
答案 0 :(得分:0)
首先,您必须决定保存文件的位置。它可以在应用程序根目录下的文件夹中,或者如果您要使用SQL FileStreaming(这非常方便,因为它将文件流存储在表中)
我将发布一个示例代码结构,为您提供一个良好的开端,但您必须弄清楚如何最适合您的需要。我已经评论过您必须编写的方法,因此从长远来看,请考虑在这些情况下调用Web服务方法。
我假设您为ExamPaper创建了一个alreday类,它将映射到您正在下载的文件。
我正在获取ExamPapers列表并将列表绑定到具有linkbutton模板的datalist。我在链接按钮单击上传递FileID作为命令参数。然后我将FileID存储在会话变量上。在newPage中,在页面加载时,我只需获取该FileID并获取相关数据和流并将其附加到响应中。我假设你下载word文档,如果没有,你将不得不更改内容类型。
尝试一下,如果您有任何疑问,请尝试在Google上搜索或在此论坛中提问。
<强>码强>
ListPage.aspx
<asp:DataList ID="PaperList" runat="server" RepeatDirection="Vertical" RepeatLayout="Table">
<ItemTemplate>
<table>
<tr>
<td><asp:LinkButton ID="LinkButton1" CommandArgument ='<%# Eval("FileID")%>' runat="server" Text='<%# Eval("FileName")%>' OnCommand ="btnDownload_Command"></asp:LinkButton></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
ListPage.aspx.vb
Dim PaperList As New List(Of ExamPaper)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'You have to write a method to return the list of file with fileName and the unique id(PK)
PaperList = GetListofPapers()
'databind the list
Me.PaperList.DataSource = DTItems
Me.PaperList.DataBind()
End Sub
Protected Sub btnDownload_Command(sender As Object, e As CommandEventArgs)
Session.Add("FileID", e.CommandArgument)
Response.Redirect("DownloadDoc.aspx?, False)
End Sub
DownloadDoc.aspx.cs
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim fileID = Session.Item("FileID")
Dim fileInfo As New ExamPaper
Dim binarystream() As Byte
' Methot to get other file Info
fileInfor = getPaperInfor(FileID)
' write the method to convert file to binary
binarystream = GetStream(fileID)
Response.ClearHeaders()
Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileInfor.FileName )
Response.ContentType = "application/vnd.openxmlformats- officedocument.wordprocessingml.document"
If Not binarystream Is Nothing Then
Response.BinaryWrite(binarystream)
Response.Flush()
Response.Close()
End If
End Sub