安卓上传图片工具类

来源:互联网 发布:crt软件使用 编辑:程序博客网 时间:2024/04/29 23:49
public class UploadPicture {    private static final int TIME_OUT = 10 * 1000;    private static final String CHARSET = "utf-8";/*传进的参数分别是:要上传的文件和要上传到服务器的URL*/    public static String uploadFile( File file, String RequestURL) throws IOException {        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 才可以在PHP中得到对应的文件                 * filename是文件的名字,包含后缀名的   比如:abc.png                 * 采取的方式是将文件名前面用下划线和id再一个下划线的方式,命名的                 * php服务器端,再将其分开,得到id                 */                sb.append("Content-Disposition: form-data; name=\"file\"; 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();                if (res == 200) {                    InputStream input = conn.getInputStream();                    StringBuffer sb1 = new StringBuffer();                    int temp;                    while ((temp = input.read()) != -1) {                        sb1.append((char) temp);                    }                    result = sb1.toString();                } else {                }            }        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return result;    }}
0 0