用ASP.NET做一个文件上传功能,前台同过HTML input file 控件 将文件上传到FTP 服务器 ;

hunaifeng99 2014-04-08 08:07:58
前台我是用JS动态创建file控件,当点击上传附件时创建一个file控件,后台代码我想遍历这些文件将他们上传到FTP服务器上,我的思路是后台遍历这些文件获取每个文件的绝对路径,使用FileInfo(文件绝对路径)和FtpWebRequest.GetRequestStream(); 将文件通过流的形式写入FTP服务器指定的文件夹中,现在就是那个后台去上传文件的绝对路径取不到,得到的是一个文件名并不是绝对路径,网上说现在为了安全性的考虑获取不到绝对路径了,不知道还有没有别的好办法;还有一种想法就是先将上传的文件保存到WEB服务器中,然后再将web服务器中的上传文件通过FTP的方式上传FTP服务器如果这样做的话我是不是每次将文件上传到FTP服务器后都要讲WEB服务器中的文件删除?这样做是不是太麻烦了有没有其他的好办法?
希望懂得能给一些帮助!
...全文
234 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pd_1503 2015-03-26
  • 打赏
  • 举报
回复
我现在也碰到了这样的问题,能否问问楼主是怎么样解决的吗?可以的话,发我邮箱775212760@qq.com 或者在贴中回复也可以。跪求!
myhope88 2014-04-09
  • 打赏
  • 举报
回复
先传至服务器上面,然后在服务器上再传至ftp上面
hunaifeng99 2014-04-09
  • 打赏
  • 举报
回复
引用 6 楼 onetwofree 的回复:
描述的技术问题好像怪怪的!最好描述一下实际需求情况,而不是技术方面的问题。然后看看有什么解决方法。
我就是想做一个上传文件的功能,能把文件上传到FTP服务器上
onetwofree 2014-04-09
  • 打赏
  • 举报
回复
描述的技术问题好像怪怪的!最好描述一下实际需求情况,而不是技术方面的问题。然后看看有什么解决方法。
  • 打赏
  • 举报
回复
就算是你能“获取绝对路径”,你在web服务器上用什么 FileInfo(绝对路径) 也不可能取得浏览器端的文件啊。比如说我有个文件 C:\maps\gbuddy\2\5\Map_x=216002y=99005zoom=18.png 你在你的服务器是怎样用 FileInfo("C:\\maps\\gbuddy\\2\\5\\Map_x=216002y=99005zoom=18.png") 访问它呢? 建议你把流程先仔细审查一遍。
hunaifeng99 2014-04-09
  • 打赏
  • 举报
回复
hunaifeng99 2014-04-09
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
就算是你能“获取绝对路径”,你在web服务器上用什么 FileInfo(绝对路径) 也不可能取得浏览器端的文件啊。比如说我有个文件 C:\maps\gbuddy\2\5\Map_x=216002y=99005zoom=18.png 你在你的服务器是怎样用 FileInfo("C:\\maps\\gbuddy\\2\\5\\Map_x=216002y=99005zoom=18.png") 访问它呢? 建议你把流程先仔细审查一遍。
我明白你的意思了 那我这样做行不 private void Upload(HttpPostedFile postedfile) { string serverDir = " "; string ftpServerIP = " ";//服务器ip string ftpUserID = " ";//用户名 string ftpPassword = " ";//密码 string uri = string.Format("ftp://{0}/{1}/{2}", ftpServerIP, serverDir, timeMc); FtpWebRequest reqFTP;// 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));// ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);// 默认为true,连接不会被关闭// 在一个命令之后被执行 reqFTP.KeepAlive = false;// 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile;// 指定数据传输类型 reqFTP.UseBinary = true;// reqFTP.ContentLength = postedfile.ContentLength;// 上传文件时通知服务器文件的大小 try { Stream stream = postedfile.InputStream; int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen = 0; Stream ftpStream = reqFTP.GetRequestStream(); while ((contentLen = stream.Read(buff, 0, buffLength)) > 0) { ftpStream.Write(buff, 0, contentLen); } ftpStream.Close(); stream.Close(); } catch (Exception ex) {// Response.Write("Upload Error:" + ex.Message); } }
机器人 2014-04-08
  • 打赏
  • 举报
回复
没有更好的办法,FTP的路径应该在 asp.net 后台设定好。将相应的文件保存到相应的FTP路径上。 这个还可以利用 FTPClient 来做。 你可以先保存到asp.net 后台,然后用个定时 job 批量处理转移到 FTP 上去。

62,047

社区成员

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

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

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

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