`
张玉龙
  • 浏览: 737185 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Android 上传文件[转]

 
阅读更多
原文 http://www.cnblogs.com/greatverve/archive/2011/12/23/android-upload.html
package com.spring.sky.image.upload.network;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.UUID;

import android.util.Log;

/**
 * 
 * 上传工具类
 * @author spring sky
 * Email:vipa1888@163.com
 * QQ:840950105
 * MyName:石明政
 */
public class UploadUtil {
    private static final String TAG = "uploadFile";
    private static final int TIME_OUT = 10*1000;   //超时时间
    private static final String CHARSET = "utf-8"; //设置编码
    /**
     * android上传文件到服务器
     * @param file  需要上传的文件
     * @param RequestURL  请求的rul
     * @return  返回响应的内容
     */
    public static String uploadFile(File file,String RequestURL)
    {
        String result = null;
        String  BOUNDARY =  UUID.randomUUID().toString();  //边界标识   随机生成
        String PREFIX = "--" , LINE_END = "\r\n"; 
        String CONTENT_TYPE = "multipart/form-data";   //内容类型
        
        try {
            URL url = new URL(RequestURL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(TIME_OUT);
            conn.setConnectTimeout(TIME_OUT);
            conn.setDoInput(true);  //允许输入流
            conn.setDoOutput(true); //允许输出流
            conn.setUseCaches(false);  //不允许使用缓存
            conn.setRequestMethod("POST");  //请求方式
            conn.setRequestProperty("Charset", CHARSET);  //设置编码
            conn.setRequestProperty("connection", "keep-alive");   
            conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); 
            
            if(file!=null)
            {
                /**
                 * 当文件不为空,把文件包装并且上传
                 */
                DataOutputStream dos = new DataOutputStream( conn.getOutputStream());
                StringBuffer sb = new StringBuffer();
                sb.append(PREFIX);
                sb.append(BOUNDARY);
                sb.append(LINE_END);
                /**
                 * 这里重点注意:
                 * name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件
                 * filename是文件的名字,包含后缀名的   比如:abc.png  
                 */
                
                sb.append("Content-Disposition: form-data; name=\"img\"; filename=\""+file.getName()+"\""+LINE_END); 
                sb.append("Content-Type: application/octet-stream; charset="+CHARSET+LINE_END);
                sb.append(LINE_END);
                dos.write(sb.toString().getBytes());
                InputStream is = new FileInputStream(file);
                byte[] bytes = new byte[1024];
                int len = 0;
                while((len=is.read(bytes))!=-1)
                {
                    dos.write(bytes, 0, len);
                }
                is.close();
                dos.write(LINE_END.getBytes());
                byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();
                dos.write(end_data);
                dos.flush();
                /**
                 * 获取响应码  200=成功
                 * 当响应成功,获取响应的流  
                 */
                int res = conn.getResponseCode();  
                Log.e(TAG, "response code:"+res);
//                if(res==200)
//                {
                    Log.e(TAG, "request success");
                    InputStream input =  conn.getInputStream();
                    StringBuffer sb1= new StringBuffer();
                    int ss ;
                    while((ss=input.read())!=-1)
                    {
                        sb1.append((char)ss);
                    }
                    result = sb1.toString();
                    Log.e(TAG, "result : "+ result);
//                }
//                else{
//                    Log.e(TAG, "request error");
//                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
}
分享到:
评论

相关推荐

    android 文件上传含进度条

    在Android开发中,实现文件上传并展示进度条是一项常见的需求,尤其在用户需要长时间等待的场景下,如上传大文件时。"android 文件上传含进度条"这个标题恰好揭示了我们要实现的功能:在Android应用中,既要能上传...

    Android上传文件到 net服务器 包含两方代码

    以下是一个简单的Android上传文件的示例代码片段: ```java public void uploadFile(String filePath) { HttpURLConnection connection = null; try { URL url = new URL("http://yourserver.com/upload"); ...

    Android文件上传,文件选择器,多选

    在Android应用开发中,文件上传和文件选择器是常见的功能需求。用户可能需要从设备存储中选择一个或多个文件,例如图片、文档或音频文件,然后上传到服务器或进行其他操作。本文将深入探讨如何在Android平台上实现...

    android大文件分段上传

    在Android平台上,大文件的上传是一项挑战,因为考虑到网络稳定性、设备性能以及用户体验等因素。在标题"android大文件分段上传"中提到的方法,是通过使用Socket流将大文件分段进行上传,这是一种有效应对大文件传输...

    android文件上传控件

    在Android应用开发中,文件上传是一项常见的功能,尤其在社交、云存储或协作类应用中。本篇将详细讲解如何在Android中实现文件上传,并结合“亲测可用”的控件来探讨具体实践。 首先,我们需要了解Android中的文件...

    Android 文件上传Demo

    在Android平台上,文件上传是一项常见的任务,特别是在开发涉及用户数据交互的应用时,如社交媒体应用、云存储服务等。本教程将深入探讨如何在Android客户端实现文件及文件夹上传,并介绍服务器端的相关处理。附件中...

    android 文件上传(多个或单个),图片上传

    在Android开发中,文件上传,特别是图片上传,是常见的需求之一。这涉及到用户选择本地文件,通常是图片,然后通过网络接口将这些文件发送到服务器。本文将深入探讨如何实现Android平台上的多文件和单文件上传,以及...

    Android 上传文件到c# webservice

    在Android应用开发中,有时需要将本地文件上传到服务器,以实现数据同步或者备份功能。在本场景中,我们讨论的是如何将Android设备上的文件上传到由C#编写的Web服务(WebService)。以下是对这个过程的详细解释: 1...

    android 选择文件上传至服务器 包含服务器代码

    在Android应用开发中,文件上传是一项常见的功能,例如用户可能需要将照片、文档或音频文件发送到服务器进行存储或处理。本教程将详细介绍如何在Android客户端实现文件选择并上传至服务器,同时提供服务器端的处理...

    Android端上传文件的jar包

    在Android应用开发中,文件上传是一项常见的功能,例如用户可能需要上传照片、文档或音频到服务器进行存储或分享。为了实现这一功能,开发者通常会利用HTTP协议或者更现代的HTTPS协议,通过网络请求库(如Volley、...

    Android上传文件工具类

    Android上传文件工具类

    Android上传文件到FTP

    在Android平台上,将文件上传至FTP(File Transfer Protocol)服务器是一项常见的任务,尤其在处理用户数据备份、资源共享或媒体分享时。本知识点主要探讨如何在Android应用中实现在SD卡中选择图片并上传到FTP服务器...

    Android大文件上传

    在Android平台上,大文件上传是一项常见的任务,但也是一个挑战,因为Android设备的内存限制和网络环境的不稳定性。本文将深入探讨如何在Android应用中实现高效、稳定的大型文件上传功能。 首先,理解Android系统对...

    Android多线程文件上传

    在Android应用开发中,文件上传是一项常见的任务,尤其是在处理大文件或者需要提高用户交互体验时,多线程技术显得尤为重要。本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程...

    android上传大文件亲测可用

    综上所述,Android上传大文件是一个涉及多步操作的过程,通过Socket实现高效传输,合理利用分块、编码、断点续传和进度显示等技术,可以确保大文件如200MB的`audioRecordTest`在3分钟内顺利上传到服务器。...

    Android文件上传.rar

    在Android平台上进行文件上传是一项常见的任务,特别是在开发涉及用户交互的应用程序时,如社交媒体应用、云存储服务等。本文将详细解析如何在Android系统中实现文件上传,主要围绕"Android文件上传"这一主题展开,...

    android断点上传文件

    在Android开发中,断点上传是一项重要的功能,它允许用户在网络连接不稳定或者设备突然断电的情况下,能够继续之前未完成的文件上传过程。这通常涉及到网络编程,特别是使用Socket通信机制来实现。以下是对这个主题...

    android webview上传文件

    本文将深入探讨如何在Android的WebView中实现文件上传功能,特别是图片上传,并涉及到服务端和客户端的实现细节。 首先,我们要理解WebView是如何处理文件选择的。在Android中,WebView并不直接支持文件选择对话框...

    Android 手机文件上传示例.zip

    在Android平台上,文件上传是一个常见的任务,特别是在移动应用开发中,如社交应用、云存储服务等,都需要用户能够上传图片、文档等数据。本示例将重点讲解如何在Android手机上实现文件上传功能。 首先,我们需要...

    Android上传文件到服务器

    在Android开发中,将文件上传至服务器是一项常见的需求,尤其是对于移动应用而言,如图片分享、文档传输等场景。本文将详细讲解如何实现Android应用程序上传文件到FTP(File Transfer Protocol)服务器,包括单文件...

Global site tag (gtag.js) - Google Analytics