Introducción a esta sección
Esta sección es la misma que la siguiente sección para descargas de archivos, ingrese con cuidado... Ahora, el desarrollo real implica la carga de archivos y no escribirá los códigos de carga usted mismo. Generalmente, integrará una tercera biblioteca de red para cargas de imágenes, como android-async-http, okhttp, etc. Además, Qiniu también proporciona API para descargar y cargar. Si lo desea, puede ir al sitio web oficial para ver los documentos API relacionados. Si te interesa esta sección, ¡échale un vistazo!
1. El método clave para cargar imágenes utilizado en el proyecto:
Después de pensarlo, decidí publicar el método principal para cargar imágenes utilizado en el proyecto de la empresa. Aquí uso una biblioteca de terceros: android-async-http.jar. Descargue esta biblioteca en github~ y luego llame al siguiente método ¡Simplemente cambie la URL usted mismo!
El método principal para cargar imágenes es el siguiente:
privado void sendImage(Bitmap bm) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 60, corriente); byte[] bytes = stream.toByteArray(); String img = new String(Base64.encodeToString(bytes, Base64.DEFAULT)); Cliente AsyncHttpClient = nuevo AsyncHttpClient(); RequestParams params = new RequestParams(); params.add("img", img); client.post("http:xxx/postIcon", params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int i, Header[] headers, byte[] bytes) { Toast.makeText(MainActivity.this, "Upload Success !", Tostada.LENGTH_LONG).mostrar(); } @Anular public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) { Toast.makeText(MainActivity.this, "Upload Fail!", Toast.LENGTH_LONG).show(); } }); }
2. Use HttpConnection para cargar archivos:
Todo tipo de problemas... Se recomienda utilizar el método 1. Por supuesto, si eres demasiado libre, puedes echar un vistazo. Si tienes ruedas, no las hagas tú mismo...
clase pública SocketHttpRequester { /** * 发送xml数据 * @param ruta 请求地址 * @param xml xml数据 * @param codificación 编码 * @return * @throws Exception */ public static byte[] postXml(String path, String xml, codificación de cadena) arroja una excepción { byte [] datos = xml.getBytes (codificación); URL url = nueva URL (ruta); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(verdadero); conn.setRequestProperty("Content-Type", "text/xml; charset="+ codificación); 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; } /** * Enviar datos directamente al servidor a través del protocolo HTTP, de la siguiente manera Función de envío de formulario: * <FORM METHOD=POST ACTION="http://192.168.0.200:8080/ssi/fileload/test.do" enctype="multipart/form-data"> <INPUT TYPE="text" NAME= "nombre"> <INPUT TYPE="text" NAME="id"> <input type="file" name="imagefile"/> <input type="file" name="zip "/> </FORM> * @param ruta ruta de carga (nota: evite usar pruebas de ruta como localhost o 127.0.0.1, * porque apuntará al simulador de teléfono, puede usar http://www.baidu.com o http://192.168.1.10:8080 prueba de ruta) * @param params solicitud de clave de parámetro es el nombre del parámetro, el valor es el valor del parámetro * @param file upload file */ public static boolean post( Ruta de cadena, Map<String, String> params, FormFile[] archivos) arroja una excepción { //Separador de datos final String BOUNDARY = "---------------------------7da2137580612"; // Datos marca final "---------------------------7da2137580612--" cadena final línea final = "--" + LÍMITE + "--/ r /norte"; longitud(); for (FormFile uploadFile: archivos) { StringBuilder fileExplain = new StringBuilder(); archivoExplicar.append("--"); archivoExplicar.append(LÍMITE); archivoExplicar.append("/r/n"); fileExplain.append("Content-Disposition: form-data;name=/""+ uploadFile.getParameterName()+"/";filename=/""+ uploadFile.getFilname() + "/"/r/n") ; fileExplain.append("Tipo de contenido: "+ uploadFile.getContentType()+"/r/n/r/n"); archivoExplicar.append("/r/n"); fileDataLength += fileExplain.length(); if(uploadFile.getInStream()!=null){ longitud(); fileDataLength += uploadFile.getFile().length(); }demás{ fileDataLength += uploadFile.getData().length; } } //再构造文本类型参数的实体数据 StringBuilder textEntity = new StringBuilder(); for (Map.Entry<String, String> entrada: params.entrySet()) { textEntity.append("--"); textEntity.append(LÍMITE); EntidadTexto.append("/r/n"); textEntity.append("Contenido-Disposición: formulario-datos; nombre=/""+ entrada.getKey() + "/"/r/n/r/n"); textEntity.append(entrada.getValue()); entidad de texto. } //Calcule la longitud total de los datos de la entidad transmitidos al servidor (longitud total del texto + datos totales longitud + delimitador) int dataLength = textEntity.toString().getBytes().length + fileDataLength + endline.getBytes().length; URL url = nueva URL (ruta); //El número de puerto predeterminado en realidad se puede omitir int port = url. getPort ()==-1 ? 80 : url.getPort(); //Construir un enlace Socket Socket socket = new Socket(InetAddress.getByName(url.getHost()), port); //Obtener un flujo de salida (de Transmisión de Android a la web) OutputStream outStream = socket.getOutputStream(); //Lo siguiente completa el envío del encabezado de solicitud HTTP String requestmethod = "POST "+ url.getPath()+" HTTP/1.1/r/n"; outStream.write(requestmethod .getBytes()); //Construir aceptar String accept = "Aceptar: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms- xbap, aplicación/x-ms-aplicación, aplicación/vnd.ms-excel, aplicación/vnd.ms-powerpoint, aplicación/msword, */*/r/n"; outStream.escribir(aceptar.getBytes()); //构建language String language = "Aceptar-Idioma: zh-CN/r/n"; outStream.write(idioma.getBytes()); //构建contenttype String contenttype = "Content-Type: multipart/form-data; border="+ BOUNDARY+ "/r/n"; outStream.write(contenttype.getBytes()); //构建longitud del contenido Cadena contentlength = "Contenido-Longitud: outStream.write(contentlength.getBytes()); //Construir cadena viva active = "Conexión: Keep-Alive/r/n"; outStream.write(alive.getBytes()); //Construir host String host = "Host : "+ url.getHost() +":"+ port +"/r/n"; outStream.write(host.getBytes()); //Después de escribir el encabezado de la solicitud HTTP, escriba un retorno de carro y un avance de línea de acuerdo al protocolo HTTP outStream.write("/r/n".getBytes()); //Enviar todos los datos de entidad de tipo texto outStream.write(textEntity.toString().getBytes()); fileEntity.append("--"); fileEntity.append(LÍMITE); //Enviar datos de entidad de todos los tipos de archivos para(FormFile uploadFile: archivos) { StringBuilder fileEntity = new StringBuilder(); archivoEntidad.append("/r/n"); fileEntity.append("Content-Disposition: form-data;name=/""+ uploadFile.getParameterName()+"/";filename=/""+ uploadFile.getFilname() + "/"/r/n") ; fileEntity.append("Content-Type: "+ uploadFile.getContentType()+"/r/n/r/n"); outStream.write(fileEntity.toString().getBytes()); //边读边写 if(uploadFile.getInStream()!=null) { byte[] buffer = new byte[1024]; largo int = 0; while((len = uploadFile.getInStream().read(buffer, 0, } uploadFile.getInStream().close(); } else { outStream.write(uploadFile.getData(), 0, uploadFile.getData().length); } outStream.write("/r/n".getBytes() ); } // El final finalizado los datos se envía a continuación, lo que indica que los datos han de " 200")==-1) devuelve falso; } { outStream.flush(); outStream.close(); lector.close(); socket.close(); return true; } /** * Enviar datos al servidor * @param ruta ruta de carga (nota: evitar Use una prueba de ruta como localhost o 127.0.0.1, porque apuntará al simulador de teléfono móvil, puede usar una prueba de ruta como http://www.baidu.com o http://192.168.1.10:8080) * @ param params La clave del parámetro de solicitud es el nombre del parámetro, y el valor es el valor del parámetro * @param file upload file */ public static boolean post(String path, Map<String, String> params, FormFile file) throws Exception { return post (ruta, parámetros, nuevo FormFile []{archivo}); } /** * Envíe los datos al servidor * @param path upload path (nota: evite usar localhost o 127.0.0.1 path test, porque apuntará al simulador de teléfono móvil, puede usar http://www.baidu.com o http: / /192.168.1.10:8080 prueba de ruta) * @param params la clave del parámetro de solicitud es el nombre del parámetro, el valor es el valor del parámetro * @param codifica la codificación */ public static byte[] postFromHttpClient(String path, Map<String, String> params , String encode) throws Exception { //utilizado para almacenar los parámetros de solicitud List<NameValuePair> formparams = new ArrayList<NameValuePair>(); for(Map.Entry<String, String> entry : params.entrySet()) { forparams. agregar (nuevo BasicNameValuePair (entrada. getKey(), entrada. getValue())); } UrlEncodedFormEntity entidad = new UrlEncodedFormEntity(formparams, encode); HttpPost httppost = new HttpPost(ruta); httppost.setEntity(entity); //Piensa como navegador HttpClient httpclient = new DefaultHttpClient(); //Enviar solicitud de publicación HttpResponse resp onse = httpclient .execute(httppost); return readStream(response.getEntity().getContent()); } /** * Enviar solicitud * @param ruta ruta de solicitud * @param params la clave del parámetro de solicitud es el nombre del parámetro y el valor es el valor del parámetro * @ param encode Codificación de parámetros de solicitud */ public static byte[] post(String path, Map<String, String> params, String encode) arroja una excepción { HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //Conn.setDoOutput(true ); // Cadena params = "método=guardar&nombre="+ URLEncoder.encode("Old Bi", "UTF-8")+ "&age=28&";// StringBuilder parambuilder = new StringBuilder(""); if(params!=null && !params.isEmpty()) { for(Map.Entry<String, String> entrada : params.entrySet()) { parambuilder.append(entry.getKey()).append("=" ) .append(URLEncoder.encode(entry.getValue(), encode)).append("&"); } parambuilder.deleteCharAt(parambuilder.length()-1); } byte[] datos = parambuilder.toString().getBytes(); URL url = nueva URL (ruta); //Conn.setUseCaches(false ); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("POST"); //下面设置http请求头 conn.setRequestProperty("Aceptar", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd. ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"); conn.setRequestProperty("Aceptar-Idioma", "zh-CN"); conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; 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("Conexión", "Keep-Alive"); //Enviar parámetro DataOutputStream outStream = new DataOutputStream(conn.getOutputStream()); outStream. write(data);//Enviar el parámetro outStream.flush(); outStream.close(); if(conn.getResponseCode()==200) { return readStream(conn. getInputStream()); } devuelve nulo; } /** * Leer flujo * @param inStream * @return 字节数组 * @throws Exception */ byte estático público [] readStream (InputStream inStream) arroja una excepción { ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] búfer = nuevo byte[1024]; largo int = -1; while( (len=inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } vapor.cerrar(); inStream.close(); volver outSteam.toByteArray(); } }