Carga de archivos de Android

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();  
    }   
}  

Supongo que te gusta

Origin blog.csdn.net/leyang0910/article/details/131474700
Recomendado
Clasificación