本文来自投稿,不代表长河网立场,转载请注明出处: http://www.changhe99.com/a/MOreYaJr2o.html
Android使用HttpURLConnection上传图片,adroid开发中会经常用到上传头像的功能,adroiddk中内置了HttURLCoectio类可以用来实现图片上传功能。
android开发中会经常用到上传头像的功能,androidsdk中内置了HttpURLConnection类可以用来实现图片上传功能。工具/原料AndroidHttpURLConnectionAndroid手机方法/步骤1本文采用Kotlin来实现图片上传。源码如下:2packagecom.study.threetestimportandroid.graphics.Bitmapimportandroid.graphics.BitmapFactoryimportandroid.os.AsyncTaskimportandroid.os.Bundleimportandroid.support.v7.app.AppCompatActivityimportkotlinx.android.synthetic.main.activity_main.*importjava.io.ByteArrayOutputStreamimportjava.io.DataOutputStreamimportjava.net.HttpURLConnectionimportjava.net.URLimportjava.util.*classMainActivity:AppCompatActivity(){ privatevalserverHost=\"http://192.168.2.1:9000/upload\" overridefunonCreate(savedInstanceState:Bundle?){ super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) sample_text.text=stringFromJNI() button.setOnClickListener({ upLoadPic() }) } /** *Anativemethodthatisimplementedbythe\'native-lib\'nativelibrary, *whichispackagedwiththisapplication. */ externalfunstringFromJNI():String companionobject{ //Usedtoloadthe\'native-lib\'libraryonapplicationstartup. init{ System.loadLibrary(\"native-lib\") } } privatefunupLoadPic(){ valbitmap=BitmapFactory.decodeResource(resources,R.mipmap.ic_launcher) AsyncTask.THREAD_POOL_EXECUTOR.execute({ uploadBitmap(serverHost,convertToByte(bitmap),\"file\") }) } privatefunconvertToByte(bm:Bitmap):ByteArray{ valbyteArrayOutputStream=ByteArrayOutputStream() bm.compress(Bitmap.CompressFormat.PNG,100,byteArrayOutputStream) returnbyteArrayOutputStream.toByteArray() } privatefunuploadBitmap(urlHost:String,imageBytes:ByteArray,key:String):String{ vallineEnd=\"\\r\\n\" valprefix=\"--\" valboundary=UUID.randomUUID().toString() try{ valurl=URL(urlHost) valcon=url.openConnection()asHttpURLConnection con.doInput=true con.doOutput=true con.useCaches=false con.requestMethod=\"POST\" con.setRequestProperty(\"Connection\",\"Keep-Alive\") con.setRequestProperty(\"Charset\",\"utf-8\") con.setRequestProperty(\"Content-Type\",\"multipart/form-data;boundary=\"+boundary) valdsDataOutputStream=DataOutputStream(con.outputStream) dsDataOutputStream.writeBytes(prefix+boundary+lineEnd) dsDataOutputStream.writeBytes(\"Content-Disposition:form-data;\"+\"name=\\\"\"+key+\"\\\";filename=\\\"\"+ \"11.jpg\\\"\"+lineEnd) dsDataOutputStream.writeBytes(lineEnd) dsDataOutputStream.write(imageBytes,0,imageBytes.size) dsDataOutputStream.writeBytes(lineEnd) dsDataOutputStream.writeBytes(prefix+boundary+prefix+lineEnd) dsDataOutputStream.close() valcah=con.responseCode returnif(cah==200){ valisInputStream=con.inputStream varch=0 valbuffer=StringBuffer() while(isInputStream.read().apply{ch=this}!=-1){ buffer.append(ch.toChar()) } buffer.toString() }else{ \"false\" } }catch(e:Exception){ e.printStackTrace() } return\"false\" }}3源代码截图如下:步骤阅读步骤阅读步骤阅读步骤阅读4功能实现的是把androidicon上传到服务器privatevalserverHost=\"http://192.168.2.1:9000/upload\"地址为局域网IP地址,需要改成自己对应的地址。5服务器端也是采用Kotlin来实现的源代码如下:6@ControllerclassFileUploadController{ @RequestMapping(\"/upload\") @ResponseBody funhandleFileUpload(@RequestParam(\"file\")file:MultipartFile):String{ if(!file.isEmpty){ try{ valout=BufferedOutputStream(FileOutputStream(File(file.originalFilename))) out.write(file.bytes) out.flush() out.close() }catch(e:IOException){ e.printStackTrace() return\"uploadfailed\"+e.message } return\"uploadsuccess\" }else{ return\"uploadfailed,becausefileisempty\" } }}7服务器源代码截图如下:Android使用HttpURLConnection上传图片的功能就介绍完了。步骤阅读END注意事项服务器端采用是SpringMVC
赞
(0)