问题描述
求助各位大神,有一个写好的android客户端,可以上传图片,通过创建httpclient,经过base64编码,然后通过POST上传,我这边想写一个能在IIS服务器上发布的.net程序,接收那边发过来的图片,我这边要如何实现,如果能给出示例程序就更好了。下面是android部分代码HOST="http://123.456.76.71:3398:8086/ImageServer/upServer"publicvoidupload(){//bitmap转化为byte数组的方法,把压缩后的数据存放到Stream中ByteArrayOutputStreamstream=newByteArrayOutputStream();upbitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);byte[]b=stream.toByteArray();//将图片流以字符串形式存储下来Stringfile=newString(Base64Coder.encodeLines(b));HttpClientclient=newDefaultHttpClient();//设置上传参数List<NameValuePair>formparams=newArrayList<NameValuePair>();formparams.add(newBasicNameValuePair("file",file));HttpPostpost=newHttpPost(HOST);UrlEncodedFormEntityentity;try{entity=newUrlEncodedFormEntity(formparams,"UTF-8");post.addHeader("Accept","text/javascript,text/html,application/xml,text/xml");post.addHeader("Accept-Charset","GBK,utf-8;q=0.7,*;q=0.3");post.addHeader("Accept-Encoding","gzip,deflate,sdch");post.addHeader("Connection","Keep-Alive");post.addHeader("Cache-Control","no-cache");post.addHeader("Content-Type","application/x-www-form-urlencoded");post.setEntity(entity);HttpResponseresponse=client.execute(post);System.out.println(response.getStatusLine().getStatusCode());HttpEntitye=response.getEntity();System.out.println(EntityUtils.toString(e));if(200==response.getStatusLine().getStatusCode()){System.out.println("上传完成");Looper.prepare();Toast.makeText(MainActivity.this,"图片上传成功!",Toast.LENGTH_LONG).show();myDialog.dismiss();Looper.loop();}else{//System.out.println("上传失败");Looper.prepare();Toast.makeText(MainActivity.this,"图片上传失败!,请重新上传",Toast.LENGTH_SHORT).show();Looper.loop();}client.getConnectionManager().shutdown();}catch(Exceptione){e.printStackTrace();}}
解决方案
解决方案二:
如果你要以流的方式来上传图片,那就必须multipart/form-data方式接收,当然还有种方式,将图片转化为base64格式,这样就可以按application/x-www-form-urlencoded的方式来接收,给你一个webapi按multipart/form-data方式接受的文章
解决方案三:
好吧,我没细看,服务端你只要Request.Form["file"]来取到字符串,再将base64转为byte[],然后通过Memory来读取,最后通过Image.FromStream来转化为图片就可以了,当然其实后面几步转化为图片的可以忽略,你可以直接对取到的byte进行是否是图片的判断,这里有几种常见的类型判断,判断通过后,直接用StreamWriter将图片按文件流的方式直接写入文件
解决方案四:
引用2楼starfd的回复:
好吧,我没细看,服务端你只要Request.Form["file"]来取到字符串,再将base64转为byte[],然后通过Memory来读取,最后通过Image.FromStream来转化为图片就可以了,当然其实后面几步转化为图片的可以忽略,你可以直接对取到的byte进行是否是图片的判断,这里有几种常见的类型判断,判断通过后,直接用StreamWriter将图片按文件流的方式直接写入文件
你好,我是个初学者,问点基础的,我是应该见一个aspx文件还是asmx文件,然后新建一个类吗,在里面使用Request.Form["file"],只是这条语句就可以实现接收吗,需要写监听程序吗?
解决方案五:
一句话概括:把APP端当成浏览器
解决方案六:
引用4楼tongxuejie的回复:
一句话概括:把APP端当成浏览器
你好,你有以前写过的程序吗?可以给我借鉴一下的。
解决方案七:
你这是aspx或者ashx都可以,用mvc,webapi也可以
解决方案八:
引用6楼starfd的回复:
你这是aspx或者ashx都可以,用mvc,webapi也可以
因为是http通信,http有一些头文件,如何把头文件去掉,然后把剩下的字符串用base64解码?
解决方案九:
引用6楼starfd的回复:
你这是aspx或者ashx都可以,用mvc,webapi也可以
最近老师催的比较紧,我基础又很差,你能不能帮我把代码写出来,我可以支付宝给你转20,如果没时间写的话,就当我没说。
解决方案十:
引用8楼jiutangwol744078的回复:
Quote: 引用6楼starfd的回复:
你这是aspx或者ashx都可以,用mvc,webapi也可以最近老师催的比较紧,我基础又很差,你能不能帮我把代码写出来,我可以支付宝给你转20,如果没时间写的话,就当我没说。
要耐心理解和学习原理。你们培训班老师收多少钱?他能负责任教“会”你吗?
解决方案十一:
引用9楼sp1234的回复:
Quote: 引用8楼jiutangwol744078的回复:
Quote: 引用6楼starfd的回复:
你这是aspx或者ashx都可以,用mvc,webapi也可以最近老师催的比较紧,我基础又很差,你能不能帮我把代码写出来,我可以支付宝给你转20,如果没时间写的话,就当我没说。
要耐心理解和学习原理。你们培训班老师收多少钱?他能负责任教“会”你吗?
现在是读研,给老师做相关项目,用到了http通信,上传图片,老师催得紧,来不及从头看教程,因为明天就要汇报了,所以出此下策。
解决方案十二:
引用4楼tongxuejie的回复:
一句话概括:把APP端当成浏览器
浏览器上传,Request.Form.Get("UserName")To.String(),APP上传时对应UserName处应该填写什么?
解决方案十三:
头文件跟传送主体有什么关系?一个是header,一个是body,说了aspx的话Request.Form["file"]就可以取到了,然后base64怎么转成图片这个论坛里也是定时出现问的,百度下也是随便都有的
解决方案十四:
引用12楼starfd的回复:
头文件跟传送主体有什么关系?一个是header,一个是body,说了aspx的话Request.Form["file"]就可以取到了,然后base64怎么转成图片这个论坛里也是定时出现问的,百度下也是随便都有的
我的接收已经实现,这是部分代码protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack)//是否是第一次加载,如果不是了响应客户端回发而加载该页的时候执行{}里的数据---即第一次加载{stringbytestr=Request.Form["file"];//接收app传递的字符串if(bytestr!=null){Response.Write("true");byte[]arr=Convert.FromBase64String(bytestr);//base64解码然后存入数组stringname="";name=DateTime.Now.Year.ToString()+DateTime.Now.Month+DateTime.Now.Day+DateTime.Now.Hour+DateTime.Now.Minute+DateTime.Now.Second;stringpath=Server.MapPath("Image\"+name+".jpg");MemoryStreamms=newMemoryStream(arr,0,arr.Length);//存入内存流Bitmapbmp=newBitmap(ms);bmp.Save(path,System.Drawing.Imaging.ImageFormat.Jpeg);ms.Close();}我用这条代码接收成功后,图片小了很多,手机发送的是3M左右,可是接收只有110KB左右,您知道是什么原因吗?
解决方案十五:
因为你存的是JPEG格式,会压缩的,所以110K挺正常的你打开图片看一下内容对就行。
解决方案:
图片是压缩过,但又有一个问题,求助各位大神,3g网能上传,但连wifi不能上传是什么原因,wifi和服务器都在校园网内,用我电脑做服务器,其他的网页3g和wifi都可以上,只有这个接收程序wifi不能接收,不知道是app还是我这边服务器的原因,求各位大神指导。