时间:2021-05-20
本文实例讲述了Android基于Http协议实现文件上传功能的方法。分享给大家供大家参考,具体如下:
注意一般使用Http协议上传的文件都比较小,一般是小于2M
这里示例是上传一个小的MP3文件
1.主Activity:MainActivity.java
public class MainActivity extends Activity{ private static final String TAG = "MainActivity"; private EditText timelengthText; private EditText titleText; private EditText videoText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //提交上传按钮 Button button = (Button) this.findViewById(R.id.button); timelengthText = (EditText) this.findViewById(R.id.timelength); videoText = (EditText) this.findViewById(R.id.video); titleText = (EditText) this.findViewById(R.id.title); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String title = titleText.getText().toString(); String timelength = timelengthText.getText().toString(); Map<String, String> params = new HashMap<String, String>(); params.put("method", "save"); params.put("title", title); params.put("timelength", timelength); try { //得到SDCard的目录 File uploadFile = new File(Environment.getExternalStorageDirectory(), videoText.getText().toString()); //上传音频文件 FormFile formfile = new FormFile("02.mp3", uploadFile, "video", "audio/mpeg"); SocketHttpRequester.post("http://192.168.1.100:8080/videoweb/video/manage.do", params, formfile); Toast.makeText(MainActivity.this, R.string.success, 1).show(); } catch (Exception e) { Toast.makeText(MainActivity.this, R.string.error, 1).show(); Log.e(TAG, e.toString()); } } }); }}2.上传工具类,注意里面构造协议字符串需要根据不同的提交表单来处理
public class SocketHttpRequester{ /** * 发送xml数据 * @param path 请求地址 * @param xml xml数据 * @param encoding 编码 * @return * @throws Exception */ public static byte[] postXml(String path, String xml, String encoding) throws Exception{ byte[] data = xml.getBytes(encoding); URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "text/xml; charset="+ encoding); conn.setRequestProperty("Content-Length", String.valueOf(data.length)); conn.setConnectTimeout(5 * 1000); OutputStream outStream = conn.getOutputStream(); outStream.write(data); outStream.flush(); outStream.close(); if(conn.getResponseCode()==200){ return readStream(conn.getInputStream()); } return null; } /** * 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能: * <FORM METHOD=POST ACTION="http://192.168.0.200:8080/ssi/fileload/test.do" enctype="multipart/form-data"> <INPUT TYPE="text" NAME="name"> <INPUT TYPE="text" NAME="id"> <input type="file" name="imagefile"/> <input type="file" name="zip"/> </FORM> * @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试, * 因为它会指向手机模拟器,你可以使用http://patible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", String.valueOf(data.length)); conn.setRequestProperty("Connection", "Keep-Alive"); //发送参数 DataOutputStream outStream = new DataOutputStream(conn.getOutputStream()); outStream.write(data);//把参数发送出去 outStream.flush(); outStream.close(); if(conn.getResponseCode()==200) { return readStream(conn.getInputStream()); } return null; } /** * 读取流 * @param inStream * @return 字节数组 * @throws Exception */ public static byte[] readStream(InputStream inStream) throws Exception { ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while( (len=inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); return outSteam.toByteArray(); }}public class StreamTool{ /** * 从输入流读取数据 * @param inStream * @return * @throws Exception */ public static byte[] readInputStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len = inStream.read(buffer)) !=-1 ){ outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); return outSteam.toByteArray(); }}/** * 使用JavaBean封装上传文件数据 * */public class FormFile{ //上传文件的数据 private byte[] data; private InputStream inStream; private File file; //文件名称 private String filname; //请求参数名称 private String parameterName; //内容类型 private String contentType = "application/octet-stream"; /** * 上传小文件,把文件数据先读入内存 * @param filname * @param data * @param parameterName * @param contentType */ public FormFile(String filname, byte[] data, String parameterName, String contentType) { this.data = data; this.filname = filname; this.parameterName = parameterName; if(contentType!=null) this.contentType = contentType; } /** * 上传大文件,一边读文件数据一边上传 * @param filname * @param file * @param parameterName * @param contentType */ public FormFile(String filname, File file, String parameterName, String contentType) { this.filname = filname; this.parameterName = parameterName; this.file = file; try { this.inStream = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } if(contentType!=null) this.contentType = contentType; } public File getFile() { return file; } public InputStream getInStream() { return inStream; } public byte[] getData() { return data; } public String getFilname() { return filname; } public void setFilname(String filname) { this.filname = filname; } public String getParameterName() { return parameterName; } public void setParameterName(String parameterName) { this.parameterName = parameterName; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; }}更多关于Android相关内容感兴趣的读者可查看本站专题:《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Golang+Android基于HttpURLConnection实现的文件上传功能。分享给大家供大家参考,具体如下:这里要演示的是使用Andro
一、文件上传上传文件是Web开发中经常要用到的功能:例如在基于B/S的人事信息管理系统中上传照片,在新闻发布系统中上传图片等等。。。。。要实现文件上传功能,就需
本文为大家分享了js实现文件上传功能的具体代码,供大家参考,具体内容如下XMLHttpRequest上传文件//图片上传varxhr;//上传文件方法funct
本文实例为大家分享了Java实现文件上传服务器和客户端的具体代码,供大家参考,具体内容如下文件上传服务器端:/***使用TCP协议实现上传功能的服务器端*思路:
文件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的。下面是一个模拟网站程序上传文件的例