首页 新闻 会员 周边

关于.net mvc上传文件到FTP

0
悬赏园豆:20 [已解决问题] 解决于 2015-08-22 11:41

     现在我做的上传是通过httppostfilebase把文件保存到本项目中,然后再得到项目中的这个路径上传到FTP上;这样就有一个问题,每次上传都会产生不必要的文件,文件小还好办,文件大了岂不是卡死;而且还要上传2次?

     于是我就想能不能直接获取用户上传文件的路径,百度了一番;然而并没有什么卵用,出于安全性考虑,不能获取(能获取的也是一些非兼容性的)。

     想问下各位有没有类似的问题,怎么解决的;小弟感激不敬

忧虑的心的主页 忧虑的心 | 初学一级 | 园豆:73
提问于:2015-08-09 15:07
< >
分享
最佳答案
0

不是可以文件流的方式上传吗

收获园豆:20
10:00 | 菜鸟二级 |园豆:232 | 2015-08-12 16:20

我就是想以这种方式上传,但是流上传要先指定路径

忧虑的心 | 园豆:73 (初学一级) | 2015-08-12 16:22

@清原卡尔: 把流转成byte[]

powerixao | 园豆:401 (菜鸟二级) | 2015-08-12 18:18

@清原卡尔: 

 1 private static FtpWebRequest reqFTP;
 2         #region 连接FTP
 3         private static void Connect(String path)//连接ftp  
 4         {
 5             //FtpCheckDirectoryExist(path);
 6             // 根据uri创建FtpWebRequest对象  
 7             WebRequest req= FtpWebRequest.Create(new Uri(path));
 8             reqFTP = (FtpWebRequest)req;
 9             // 指定数据传输类型  
10             reqFTP.UseBinary = true;
11             // ftp用户名和密码  
12             reqFTP.Credentials = new NetworkCredential(Dic.FtpUserID, Dic.FtpPwd);
13             reqFTP.Proxy = null;
14         }
15         #endregion
16         #region 1.0 使用FtpWebRequest类上传文件
17         /// <summary>
18         /// 使用FtpWebRequest类上传文件
19         /// </summary>
20         /// <param name="ftpurl">"ftp://115.28.80.19/Album/"</param>
21         /// <param name="file">HttpPostedFileBase</param>
22         /// <param name="filename">filename文件名</param>
23         public static string UploadFTPWebRequest(string ftpurl, Stream filestream)
24         {
25             try
26             {
27                 FtpCheckDirectoryExist(ftpurl);
28             }catch(Exception ex)
29             {
30             
31             }
32             Connect(ftpurl);
33             // 默认为true,连接不会被关闭
34             // 在一个命令之后被执行
35             reqFTP.KeepAlive = false;
36             // 指定执行什么命令
37             reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
38             // 指定数据传输类型
39             reqFTP.UseBinary = true;
40             // 上传文件时通知服务器文件的大小
41             reqFTP.ContentLength = filestream.Length;
42             // 缓冲大小设置为2kb
43             int buffLength = 2048;
44             byte[] buff = new byte[buffLength];
45             int contentLen;
46             Stream strm = reqFTP.GetRequestStream();
47             filestream.Position = 0;
48             // 每次读文件流的2kb
49             contentLen = filestream.Read(buff, 0, buffLength);
50             // 流内容没有结束
51             while (contentLen != 0)
52             {
53                 // 把内容从file stream 写入 upload stream
54                 strm.Write(buff, 0, contentLen);
55                 contentLen = filestream.Read(buff, 0, buffLength);
56             }
57             // 关闭两个流
58             strm.Close();
59             filestream.Close();
60             return ftpurl.Replace(Dic.Url_pic,"http://pic.heijxian.com/");
61         }
62         /// <summary>
63         /// 使用FtpWebRequest类上传图片文件
64         /// </summary>
65         /// <param name="ftpurl">"ftp://115.28.80.19/Album/"</param>
66         /// <param name="img">图片</param>
67         /// <param name="filename">文件名</param>
68         public static void UploadFTPWebRequest(string ftpurl, Image img)
69         {
70             using (MemoryStream stream = new MemoryStream())
71             {
72                 img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
73                 FileHelper.UploadFTPWebRequest(ftpurl, stream);
74             }
75         }
76         #endregion
View Code
10:00 | 园豆:232 (菜鸟二级) | 2015-08-13 16:24

@10:00: 大哥,file参数呢?

忧虑的心 | 园豆:73 (初学一级) | 2015-08-13 16:53

@清原卡尔: 大哥,你要什么file参数?传入file.InputStream就可以了吧??

10:00 | 园豆:232 (菜鸟二级) | 2015-08-13 16:57

@10:00: HttpPostedFileBase.InputStream?

忧虑的心 | 园豆:73 (初学一级) | 2015-08-13 16:59

@清原卡尔:

HttpPostedFileBase对象有个属性InputStream
10:00 | 园豆:232 (菜鸟二级) | 2015-08-13 17:03

@10:00: 好吧,我没用过=.=!

忧虑的心 | 园豆:73 (初学一级) | 2015-08-13 17:04
其他回答(3)
0

然而并没有什么用。你去找找别人开发的上传插件吧!不过文件太大,都会比较慢或者出现卡死的情况。

大楚打码人 | 园豆:4313 (老鸟四级) | 2015-08-10 09:35
0

拆分或者打包

powerixao | 园豆:401 (菜鸟二级) | 2015-08-11 17:40

怎么说?

支持(0) 反对(0) 忧虑的心 | 园豆:73 (初学一级) | 2015-08-11 17:43

@清原卡尔: 设定某个大小来将文件流拆分掉,每次把拆分好的小文件压缩

支持(0) 反对(0) powerixao | 园豆:401 (菜鸟二级) | 2015-08-12 18:02
0

你好,我想问下发布后客户端上传文件到服务器你是怎么做到的!请教下!谢谢了!

假装坏坏 | 园豆:122 (初学一级) | 2018-07-14 11:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册