类似发邮件时上传附件的程序如何做?

bingeng 2003-09-20 03:26:11
我做一个站内通讯,基本上是模拟邮件的流程做的,在发送信息时,可以上传附件,上传文件的程序我会,但是遇到一个难题:

需要粘贴多个附件时,可以考虑建一个表来存放附件的路径,标示附件属于哪条信息的外键最好是消息的id 号,但是此时消息Id号还未添加无

法取得,故只能把附件的id号写入消息的数据表中,问题出现在这里:
1、如何保证在传完一个附件时,他前面附件的id号的信息不丢失,可以累加为“附件id信息的控件值“.
2、列出附件列表,可以删除,记录附件id信息的控件值要做相应的修改。
3、上传部分应该在一个内框架中,它的值如何与发送的消息一起提交到数据库中.

其它思路也可以,谢谢
...全文
345 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingeng 2003-09-23
  • 打赏
  • 举报
回复
谢谢乐色.Net
daou101 2003-09-22
  • 打赏
  • 举报
回复
用ASP.NET实现邮件附加那种操作界面。后台用上传文件方式实现。
在以前的Web应用中,上传文件是个很麻烦的事,现在有了.NET,文件上传变得轻而易举。下面的这个例子实现了多文件上传功能。可以动态添加输入表单,上传的文件数量没有限制。代码如下:

MultiUpload.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="MultiUpload.aspx.vb"
Inherits="aspxWeb.MultiUpload" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>多文件上传</title>
<script language="JavaScript">
function addFile()
{
var str = '<INPUT type="file" size="50" NAME="File">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</script>
</HEAD>
<body>
<form id="form1" method="post" runat="server" enctype="multipart/form-data">
<center>
<asp:Label Runat="server" ID="MyTitle"></asp:Label>
<P id="MyFile"><INPUT type="file" size="50" NAME="File"></P>
<P>
<input type="button" value="增加(Add)" onclick="addFile()">
<asp:Button Runat="server" Text="上传" ID="Upload"></asp:Button>
<input onclick="this.form.reset()" type="button" value="重置(ReSet)">
</P>
</center>
<P align="center">
<asp:Label id="strStatus" runat="server" Font-Names="宋体" Font-Bold="True"
Font-Size="9pt" Width="500px" BorderStyle="None" BorderColor="White"></asp:Label>
</P>
</form>
</body>
</HTML>

后代码:MultiUpload.aspx.vb

Public Class MultiUpload
Inherits System.Web.UI.Page
Protected WithEvents Upload As System.Web.UI.WebControls.Button
Protected WithEvents MyTitle As System.Web.UI.WebControls.Label
Protected WithEvents strStatus As System.Web.UI.WebControls.Label

#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MyTitle.Text = "<h3>多文件上传</h3>"
Upload.Text = "开始上传"
If (Me.IsPostBack) Then Me.SaveImages()
End Sub

Private Function SaveImages() As System.Boolean
'遍历File表单元素
Dim files As System.Web.HttpFileCollection = System.Web.HttpContext.Current.Request.Files

'状态信息
Dim strMsg As New System.Text.StringBuilder("上传的文件分别是:<hr color=red>")
Dim iFile As System.Int32
Try
For iFile = 0 To files.Count - 1
'检查文件扩展名字
Dim postedFile As System.Web.HttpPostedFile = files(iFile)
Dim fileName, fileExtension As System.String
fileName = System.IO.Path.GetFileName(postedFile.FileName)
If Not (fileName = String.Empty) Then
fileExtension = System.IO.Path.GetExtension(fileName)
strMsg.Append("上传的文件类型:" + postedFile.ContentType.ToString() + "<br>")
strMsg.Append("客户端文件地址:" + postedFile.FileName + "<br>")
strMsg.Append("上传文件的文件名:" + fileName + "<br>")
strMsg.Append("上传文件的扩展名:" + fileExtension + "<br><hr>")
'可根据扩展名字的不同保存到不同的文件夹
postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("images/") + fileName)
End If
Next
strStatus.Text = strMsg.ToString()
Return True
Catch Ex As System.Exception
strStatus.Text = Ex.Message
Return False
End Try
End Function
End Class

jackyhzzjcn 2003-09-22
  • 打赏
  • 举报
回复
比如文件结构
/temp/UserName/MailAttchTempDirByGUID/附件文件

将附件文件的路径都保存到SESSION变量里,可以用文件夹名称来保存;
比如各文件名中间用|来分割,在提取的时候使用Split转换为数组,再帮定到ListBox中,ListBox Item的Value为绝对路径,Text为文件名即可;

在旁边增加一个删除按钮,根据ListBox的SelectedItem直接删除,即
System.IO.File.Delete(Server.Mappth(myListBox.SelectedValue));

jackyhzzjcn 2003-09-22
  • 打赏
  • 举报
回复
附件的上传可以一次传一个,也可以一次传几个,这个看你需要了。
jackyhzzjcn 2003-09-22
  • 打赏
  • 举报
回复
我不是说了嘛,单独传完文件后,将当前SESSION保存到一个唯一变量,既文件名列表。

然后用ListBox来显示这些文件名,选择不需要的文件,直接调用System.IO.File.Delete()删除,然后刷新该页面或者重新绑定数据,关于附件的保存目录可以放临时文件夹,每个不同的邮件可以使用GUID来区分(System.GUID.NewGuid().ToString()),在APP结束或者重起的时候,清除临时文件夹内的内容即可。
bingeng 2003-09-22
  • 打赏
  • 举报
回复
谢谢各位的热心帮助,可是这些都不是我想的,我说过上传文件的程序我会,就是如和实现那种邮件发送附件的过程:附件可以一个一个的附件单独上传,发现不需要的还可以删除,我想这些功能是大家都用过的,不是一次上传多个附件,而是每个附件单独上传的那种
待接入自我 2003-09-20
  • 打赏
  • 举报
回复
晕,写错
PF.SaveAs(Server.MapPath(".") + "\" + strFilename)
改为
PF.SaveAs(Server.MapPath(".") & "\" & strFilename)
待接入自我 2003-09-20
  • 打赏
  • 举报
回复
我发一段完整的代码吧,大家用用

HTML部分

<form id="form1" method="post" ENCTYPE="multipart/form-data">
<input name="loadfile" type="file" style="WIDTH:300px">
</form>
切记,form要加上 ENCTYPE="multipart/form-data" 这个属性

服务器端(VB)

Dim PF As System.Web.HttpPostedFile
PF = Request.Files("loadfile")
If Not (PF Is Nothing) Then
'先计算最新的文件编码,生成文件名
Dim strFilename As String = "aa.zip"
PF.SaveAs(Server.MapPath(".") + "\" + strFilename)
'后续操作
End If
bingeng 2003-09-20
  • 打赏
  • 举报
回复
我说的是一个附件一个附件的上传,看到不合适的还可以删掉其中的某个附件,就像发邮件那样的操作流程,上传文件没有问题比如163.com的信箱发送附件的过程
jackyhzzjcn 2003-09-20
  • 打赏
  • 举报
回复
将上传的附件名保存到SESSION中,用分隔符分开即可,同一个用户的一个邮件可以用System.GUID.NewGuid().ToString()来生成一个临时文件夹,如果发送,转到发送邮箱的文件夹下,如果保存为草稿也同理。

上传多个附件的方法可以参考MSN的做法。 :)
adminlxj79 2003-09-20
  • 打赏
  • 举报
回复
上传功能可以参考:http://xml.sz.luohuedu.net/xml/ShowList.asp?id=1
adminlxj79 2003-09-20
  • 打赏
  • 举报
回复
.net下有上传的组件,完全可以实现你的基本要求,但你没有必要必须用ID号来对应附件,对于多个附件你可以在各个附件名后加上分隔标识,取出的时候再用split函数分别取出,应该没有难度,我做过一个类似功能的程序,功能跟你的差不多。
lanyahuhu 2003-09-20
  • 打赏
  • 举报
回复
gz

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧