android通过http上传文件(图片)
2013-03-07 17:49
387 查看
在android开发如何上传文件到服务器,这里使用http的post方法(不懂的东西可以上网补习一下)上传一个图片,给出了android部分代码和服务器部分代码。
andorid端
FileUploadTask是完成文件上传的类。
类的使用
创建一个图片上传的任务然后进行初始化init,初始化参数fullname是文件全名如“/mnt/usb/sad1/pic1.jpg”,api是服务器接收图片的api如我实现的api是
“http://192.168.1.5:8080/clive-demo/api/v1/recommend?userId=123”
两参数都是字符类型。
然后创建一个消息接收器handler,接收图片上传完成的消息:
这里只是实现一个接收接口。
andorid端
FileUploadTask是完成文件上传的类。package com.android.TVwidget; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; class FileUploadTask extends AsyncTask<Object, Integer, Void> { String urlServer; private String pathToOurFile; long totalSize = 0; HttpURLConnection connection = null; DataOutputStream outputStream = null; DataInputStream inputStream = null; String TAG = "FileUploadTask"; String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; private Handler handler; public Handler setHandler(Handler hdl) { this.handler = hdl; return this.handler; } protected void init(String path, String server) { File uploadFile; pathToOurFile = path; uploadFile = new File(pathToOurFile); Log.i(TAG,"pathToOurFile = "+pathToOurFile); totalSize = uploadFile.length(); Log.i(TAG,"totalSize = "+totalSize); urlServer = server; return ; } @Override protected void onPreExecute() { /*文件上传提示*/ Log.i(TAG, "onPreExecute"); } /*后台执行文件上传*/ @Override protected Void doInBackground(Object... arg0) { long length = 0; int progress; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 256 * 1024; try { FileInputStream fileInputStream = new FileInputStream(new File( pathToOurFile)); Log.i(TAG," doInBackground urlServer ="+urlServer); /*http链接参数设置*/ URL url = new URL(urlServer); connection = (HttpURLConnection) url.openConnection(); connection.setChunkedStreamingMode(256 * 1024); connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Charset", "UTF-8"); connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); outputStream = new DataOutputStream( connection.getOutputStream()); outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream .writeBytes("Content-Disposition: form-data;name=\"img\";filename=\"" + pathToOurFile + "\"" + lineEnd); outputStream.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // Read file bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { outputStream.write(buffer, 0, bufferSize); length += bufferSize; progress = (int) ((length * 100) / totalSize); publishProgress(progress); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } outputStream.writeBytes(lineEnd); outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); publishProgress(100); InputStream is = connection.getInputStream(); int ch; StringBuffer sbf = new StringBuffer(); while ((ch = is.read()) != -1) { sbf.append((char) ch); } fileInputStream.close(); outputStream.flush(); outputStream.close(); /*图片完成上传后发送消息*/ Message message = new Message(); Bundle b =new Bundle(); b.putString("textStr", "finished-upload"); message.setData(b); this.handler.sendMessage(message); } catch (Exception ex) { } return null; } @Override protected void onProgressUpdate(Integer... progress) { //dialog.setProgress(progress[0]); } @Override protected void onPostExecute(Void result) { try { //dialog.dismiss(); // TODO Auto-generated method stub } catch (Exception e) { } } }
类的使用
/*消息接收器*/ Handler handler = new Handler(){ /* (non-Javadoc) * @see android.os.Handler#handleMessage(android.os.Message) */ @Override public void handleMessage(Message msg) { Bundle b=msg.getData(); String textStr=b.getString("textStr"); Log.i(TAG, "textStr is: "+textStr); /*图片上传完成消息*/ if(textStr!=null&&textStr.equals("finished-upload")) { mWebView.loadUrl("javascript:uploadFileFinished()"); } else { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "截屏成功", Toast.LENGTH_LONG).show(); } super.handleMessage(msg); } }; ... FileUploadTask fileUploadTask = new FileUploadTask(); fileUploadTask.init(fullname, api); fileUploadTask.setHandler(handler); fileUploadTask.execute(); ...
创建一个图片上传的任务然后进行初始化init,初始化参数fullname是文件全名如“/mnt/usb/sad1/pic1.jpg”,api是服务器接收图片的api如我实现的api是
“http://192.168.1.5:8080/clive-demo/api/v1/recommend?userId=123”
两参数都是字符类型。
然后创建一个消息接收器handler,接收图片上传完成的消息:
finished-upload
服务器端
@RequestMapping(value="recommend",method = RequestMethod.POST) public @ResponseBody String recommend( @RequestParam(value="userId") String userId, @RequestParam(value="img",required=false) MultipartFile img){ logger.debug("saving"); // imageDao.save(img); return "ok"; }
这里只是实现一个接收接口。
相关文章推荐
- Android 通过HTTP POST 上传图片文件
- Android 通过HTTP POST 上传图片文件
- Android 通过HTTP POST 上传图片文件
- [android]模拟Http表单,实现本地文件(图片等)上传到服务器端
- Android 通过post上传文件--HttpURLConnection实现
- Android端通过HttpURLConnection上传文件到服务器
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架
- Android程序开发通过HttpURLConnection上传文件到服务器
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- 在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件(二)
- Android 开发工具类 32_通过 HTTP 协议实现文件上传
- Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传
- 在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传
- Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传GOOD
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)