现在我做的上传是通过httppostfilebase把文件保存到本项目中,然后再得到项目中的这个路径上传到FTP上;这样就有一个问题,每次上传都会产生不必要的文件,文件小还好办,文件大了岂不是卡死;而且还要上传2次?
于是我就想能不能直接获取用户上传文件的路径,百度了一番;然而并没有什么卵用,出于安全性考虑,不能获取(能获取的也是一些非兼容性的)。
想问下各位有没有类似的问题,怎么解决的;小弟感激不敬
不是可以文件流的方式上传吗
我就是想以这种方式上传,但是流上传要先指定路径
@清原卡尔: 把流转成byte[]
@清原卡尔:
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
@10:00: 大哥,file参数呢?
@清原卡尔: 大哥,你要什么file参数?传入file.InputStream就可以了吧??
@10:00: HttpPostedFileBase.InputStream?
@清原卡尔:
HttpPostedFileBase对象有个属性InputStream
@10:00: 好吧,我没用过=.=!
然而并没有什么用。你去找找别人开发的上传插件吧!不过文件太大,都会比较慢或者出现卡死的情况。
拆分或者打包
怎么说?
@清原卡尔: 设定某个大小来将文件流拆分掉,每次把拆分好的小文件压缩
你好,我想问下发布后客户端上传文件到服务器你是怎么做到的!请教下!谢谢了!