首页 新闻 搜索 专区 学院

C#FTP上传

0
悬赏园豆:30 [已解决问题] 解决于 2013-06-24 16:07

C#FTP上传图片成功但是图片只有4KB很不理解啊有的只有0KB我上传1个1KB的图片在FTP也是4KB 怎么变大变小的

c#
问题补充:

上传时候并没有报错而且看文件大小也对

    private bool Upload(string fileName)
    {
        FtpWebRequest ftpWebRequest = null;
        FileStream locaFileStream = null;
        Stream requestStream = null;
        try
        {
            //读取文件
            FileInfo fileInfo = new FileInfo(fileName);

            //连接FTP资源
            ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpIp + "/" + fileInfo.Name));
            //登录用户名和密码
            ftpWebRequest.Credentials = new NetworkCredential(user, pwd);
            //默认为true,连接不会关闭
            ftpWebRequest.KeepAlive = false;
            //执行什么命令
            ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
            //文件大小
            ftpWebRequest.ContentLength = fileInfo.Length;
            //传输类型
            ftpWebRequest.UseBinary = true;

    //这里本来是缓存大小啊。但是我改变成和文件大小一样上传就成功,我改成2048上传文件只有2KB 很不解啊我查了N多资料都说这个属性是每次读取晓得啊求解释啊

            int byteLength = (int)fileInfo.Length;
            byte[] buff = new byte[byteLength];
            int contntLen = 0;
            //读取给定路径文件
            locaFileStream = fileInfo.OpenRead();
            //得到流
            requestStream = ftpWebRequest.GetRequestStream();
            //每次读取流
            contntLen = locaFileStream.Read(buff, 0, byteLength);
            if (contntLen != 0)
            {
                requestStream.Write(buff, 0, byteLength);
                contntLen = locaFileStream.Read(buff, 0, contntLen);
                return true;
            }
            return false;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return false;
        }
        finally
        {
            if (requestStream != null)
            {
                requestStream.Close();
            }
            if (locaFileStream != null)
            {
                locaFileStream.Close();
            }
        }
    }

只需要一个眼神的主页 只需要一个眼神 | 初学一级 | 园豆:25
提问于:2013-06-18 15:23
< >
分享
最佳答案
0

我改成2048上传文件只有2KB ,按你的程序是没错的

你只上传一次,当然是这个结果

 

 if (contntLen != 0)//应该是while吧
            {
                requestStream.Write(buff, 0, byteLength);
                contntLen = locaFileStream.Read(buff, 0, contntLen);//应该是 contntLen = locaFileStream.Read(buff, 0, byteLength);
                return true;//应该删除
            }

收获园豆:30
Yu | 专家六级 |园豆:12944 | 2013-06-18 20:57

哎,这么明显的错误,自己断点跟一下就好,明显断点调试没有。

kylin.chen | 园豆:983 (小虾三级) | 2013-06-19 10:08
其他回答(4)
0

。。。不会吧?

顾晓北 | 园豆:10219 (专家六级) | 2013-06-18 15:31

大神遇到过这样的问题吗

支持(0) 反对(0) 只需要一个眼神 | 园豆:25 (初学一级) | 2013-06-18 17:10

@只需要一个眼神: 没遇到过,谁知道你是怎么处理的?

ftpWebRequest.ContentLength = fileInfo.Length;

这个。。。你搜一下东西,应该不是一个东西。。。

fileInfo的长度是什么?应该是你图片转成byte数组以后的那个长度吧?

支持(0) 反对(0) 顾晓北 | 园豆:10219 (专家六级) | 2013-06-18 18:20

@只需要一个眼神: 或者简单点,貌似 new webclient().UploadFile也可以的吧?上面那个我看了一下,fileInfo.Length是文件的大小,就是字节是没错。

支持(0) 反对(0) 顾晓北 | 园豆:10219 (专家六级) | 2013-06-18 18:23
0

是否流丢失了?

BarneyZhang | 园豆:8 (初学一级) | 2013-06-18 15:40
0

初步还以是文件保存的问题。

kylin.chen | 园豆:983 (小虾三级) | 2013-06-18 15:53

你自己程序有问题,写文件流如果用缓存肯定要循环语句的。

支持(0) 反对(0) kylin.chen | 园豆:983 (小虾三级) | 2013-06-19 10:08
0

FTP打开上传的图片文件报错: 文件系统错误12003
 求解啊

www1233 | 园豆:202 (菜鸟二级) | 2016-08-19 09:24

是上传时候出错误 还是文件上传之后打开文件错误啊

支持(0) 反对(0) 只需要一个眼神 | 园豆:25 (初学一级) | 2016-08-20 10:07

@只需要一个眼神: 我解决了,问题出在Uri地址中出现了 空格
  顺便问一下 上传成功后 我要在winform 查看上传的图片 你有类似代码么?

支持(0) 反对(0) www1233 | 园豆:202 (菜鸟二级) | 2016-08-24 09:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册