急! WebClient上传图片总是打不开

沙伽more 2014-03-25 03:35:28
A项目一般处理程序上传代码:
 MemoryStream ms;
public void ProcessRequest(HttpContext context)
{
string _filedir = context.Server.MapPath(@"/Styles/images/");
try
{
string result = "3";
int cout = context.Request.Files.Count;
if (cout > 0)
{
HttpPostedFile hpf = context.Request.Files[0];
if (hpf != null)
{
string fileExt = Path.GetExtension(hpf.FileName).ToLower();
//只能上传文件,过滤不可上传的文件类型
string fileFilt = ".gif|.jpg|.php|.jsp|.jpeg|.png|......";
if (fileFilt.IndexOf(fileExt) <= -1)
{
result= "1";
}
int length = hpf.ContentLength; //判断文件大小
if (length > 204800)
{
result= "2";
}
byte[] bt = new byte[length];//获取文件的Byte[]
ms = new MemoryStream(bt);//用Byte[],实例化ms

UriBuilder url = new UriBuilder("http://192.168.20.162:8030/temp_1/ashx/UploadHandler.ashx");//上传路径
url.Query = string.Format("filename={0}", Path.GetFileName(hpf.FileName));//上传url参数
WebClient wc = new WebClient();
wc.OpenWriteCompleted += new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted);//委托异步上传事件
wc.OpenWriteAsync(url.Uri);//开始异步上传
context.Response.Write(hpf.FileName);
}
}
context.Response.Write(result);
}
catch
{
context.Response.Write("3");//3文件上传失败
}
}
protected void wc_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
int bufSize = 10;
int byteGet = 0;
byte[] buf = new byte[bufSize];
while ((byteGet = ms.Read(buf, 0, bufSize)) > 0)//循环读取,上传
{
e.Result.Write(buf, 0, byteGet);//注意这里
}
e.Result.Close();//关闭
ms.Close();
}


B项目接收代码:
 public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string filename = context.Request.QueryString["filename"].ToString();
using (FileStream inputStram = File.Create(context.Server.MapPath("~/img/") + filename))
{
SaveFile(context.Request.InputStream, inputStram);
}
}

protected void SaveFile(Stream stream, FileStream inputStream)
{
int bufSize = 1024;
int byteGet = 0;
byte[] buf = new byte[bufSize];
while ((byteGet = stream.Read(buf, 0, bufSize)) > 0)
{
inputStream.Write(buf, 0, byteGet);
}
}



问题:我上传图片是上传到了B项目中,但是图片好像是损坏了,打不开
...全文
197 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jolly丶 2014-08-23
  • 打赏
  • 举报
回复
   protected void wc_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
        {
                int bufSize = 10;
                int byteGet = 0;
                byte[] buf = new byte[bufSize];
                while ((byteGet = ms.Read(buf, 0, bufSize)) > 0)//循环读取,上传
                {
                    e.Result.Write(buf, 0, byteGet);//注意这里
                     uploadInfo.UploadedLength += byteGet;
                }
                //   让父页面知道已经处理上传完毕
               
            
                e.Result.Close();//关闭
                ms.Close();
       
        }
Jolly丶 2014-08-23
  • 打赏
  • 举报
回复
   // 读取要上传的文件
                        FileStream fs = new FileStream(this.fileUpload.PostedFile.FileName, FileMode.Open, FileAccess.Read);
                        ms = new BinaryReader(fs);

                        string newFile = DateTime.Now.Ticks.ToString();
                        string exit = this.fileUpload.FileName.Substring(this.fileUpload.FileName.IndexOf('.'));
                        newFile = newFile + exit;
                        UriBuilder url = new UriBuilder("http://localhost:4256/UploadFileHander.ashx");//上传路径
                        url.Query = string.Format("filename={0}", newFile);//上传url参数
                        uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength;
                        uploadInfo.FileName = newFile;
                        uploadInfo.UploadedLength = 0;
                        //文件存在 初始化...
                        uploadInfo.IsReady = true;
                        
                        WebClient wc = new WebClient();
                        wc.Credentials = CredentialCache.DefaultCredentials;
                        wc.OpenWriteCompleted += new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted);//委托异步上传事件
                        wc.OpenWriteAsync(url.Uri);//开始异步上传

                        const string js = "window.parent.onComplete('success', '{0} 已成功上传,重命名为:{1}:文件大小:{2}');";
                        ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), "progress", string.Format(js, Path.GetFileName(this.fileUpload.FileName), DateTime.Now.ToString("yyyy-MM") + "/" + DateTime.Now.Day + "/" + newFile, uploadInfo.ContentLength), true);
Jolly丶 2014-08-23
  • 打赏
  • 举报
回复
我也出现这个问题了。我传的是压缩包。。损坏了。。length那里该怎么弄??帮帮忙啊
沙伽more 2014-03-27
  • 打赏
  • 举报
回复
好了,问题解决了,是length那儿不能这么用
沙伽more 2014-03-26
  • 打赏
  • 举报
回复
引用 10 楼 sunke861 的回复:
别急。先把问题重新捋一遍。排查是哪个环节的问题。如果都不确定,就将每一步放在新的环境测试。
每个环节都走了遍,可是居然没有显示出错了,哎,实在是不知道怎么办,上午只有重新换了种提交方法了。没有用webclient了
wylp_19 2014-03-26
  • 打赏
  • 举报
回复
上传成功了吗
雪不语寒 2014-03-26
  • 打赏
  • 举报
回复
别急。先把问题重新捋一遍。排查是哪个环节的问题。如果都不确定,就将每一步放在新的环境测试。
沙伽more 2014-03-26
  • 打赏
  • 举报
回复
哎,还是不行啊,求支招啊!
gyk_net 2014-03-26
  • 打赏
  • 举报
回复
fileToUpload.SaveAs(path);
gyk_net 2014-03-26
  • 打赏
  • 举报
回复
应该是这块出了问题
参考:string path = System.IO.Path.Combine(Server.MapPath("/Uploads/Activity"), System.IO.Path.GetFileName(fileName));
沙伽more 2014-03-25
  • 打赏
  • 举报
回复
引用 7 楼 sunke861 的回复:
若图片存在(正确保存,释放写入流),显示不了,你依次检查下 1. 路径问题 2. 权限问题
查了路径和权限都没有问题的..
雪不语寒 2014-03-25
  • 打赏
  • 举报
回复
若图片存在(正确保存,释放写入流),显示不了,你依次检查下 1. 路径问题 2. 权限问题
沙伽more 2014-03-25
  • 打赏
  • 举报
回复
引用 5 楼 sunke861 的回复:
[quote=引用 4 楼 wang136206441 的回复:] [quote=引用 3 楼 sunke861 的回复:] 异步上传,读取时就该检查下是否已经上传完成。
然后呢?[/quote]先确认上传部分正确完成了。在使用图片时,判断图片,若存在则再进行下一步。[/quote] 我发上来这个里面是没有写,但是我正式的里面是判断了的,还是出现这种问题;图片打不开; 而且我还建了一个DEMO用服务器控件一模一样的代码,那个DEMO里面又没有错;图片又是正常的
雪不语寒 2014-03-25
  • 打赏
  • 举报
回复
引用 4 楼 wang136206441 的回复:
[quote=引用 3 楼 sunke861 的回复:] 异步上传,读取时就该检查下是否已经上传完成。
然后呢?[/quote]先确认上传部分正确完成了。在使用图片时,判断图片,若存在则再进行下一步。
沙伽more 2014-03-25
  • 打赏
  • 举报
回复
引用 3 楼 sunke861 的回复:
异步上传,读取时就该检查下是否已经上传完成。
然后呢?
雪不语寒 2014-03-25
  • 打赏
  • 举报
回复
异步上传,读取时就该检查下是否已经上传完成。
沙伽more 2014-03-25
  • 打赏
  • 举报
回复
怎么了啊,怎么没有人来看一下啊,.NET里面怎么这么冷清啊,,,版主能不能把这个给我移到web开发里面去啊
沙伽more 2014-03-25
  • 打赏
  • 举报
回复

62,074

社区成员

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

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

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

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