在android开发如何上传文件到服务器,这里使用http的post方法(不懂的东西可以上网补习一下)上传一个图片,给出了android部分代码和服务器部分代码。

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";}

这里只是实现一个接收接口。


更多相关文章

  1. android中UDP编程的注意事项
  2. Anroid Receiver
  3. Android中的线程总结
  4. android中如何发送及接收数据(两种方法)?
  5. Android推送服务(GCM)
  6. Android(安卓)Touch 事件总结
  7. android 仿京东抢购上下轮播消息
  8. Android(安卓)Handler消息处理顺序分析
  9. 环信集成

随机推荐

  1. PHP 排序算法之选择排序
  2. PHP 多进程和多线程的优缺点
  3. PHP 排序算法之插入排序
  4. PHP如何执行耗时脚本实时输出内容
  5. PHP 排序算法之希尔排序
  6. PHP非阻塞批量推送数据
  7. PHP实现微信支付(jsapi支付)流程的方法
  8. 关于PHP中单例模式的实现
  9. PHP怎么实现微信申请退款
  10. PHP随机生成不重复的8位卡号(数字)和卡密(字