Http的上传(下载)图片

上传

建立一个工具类

public class UploadFile {
    // 分割符,自己定义即可
    private static final String BOUNDARY = "----WebKitFo";
    private static final String TAG = "UploadFile";

    /**
     * 上传文件 到服务器
     *
     * @param params       post参数
     * @param fileFormName 文件在表单中的键 key=img  file =文件流
     * @param uploadFile   上传的文件
     * @param urlStr       上传服务器地址url
     * @throws Exception
     */
    public static void uploadFile(Map<String, String> params, String fileFormName, File uploadFile, String urlStr) throws Exception {

        String newFileName = uploadFile.getAbsolutePath().substring(uploadFile.getAbsolutePath().lastIndexOf("/") + 1);
        if (newFileName == null || newFileName.trim().equals("")) {
            newFileName = uploadFile.getName();
        }
        StringBuilder stringBuilder = new StringBuilder();
        if (params != null) {
            for (String key : params.keySet()) {
                stringBuilder.append("Content-Disposition: form-data; name=\"" + key + "\"" + "\r\n");
                stringBuilder.append("\r\n");
                stringBuilder.append(params.get(key) + "\r\n");
            }
        }

        stringBuilder.append("--" + BOUNDARY + "\r\n");
        stringBuilder.append("Content-Disposition: form-data; name=\"" + fileFormName + "\"; filename=\"" + newFileName + "\""
                + "\r\n");
        stringBuilder.append("Content-Type: image/jpg" + "\r\n");// 如果服务器端有文件类型的校验,必须明确指定ContentType
        stringBuilder.append("\r\n");
        byte[] headerInfo = stringBuilder.toString().getBytes("UTF-8");
        byte[] endInfo = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");

        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setConnectTimeout(10*1000);
        conn.setRequestProperty("Connection", "close");
        // 设置传输内容的格式,以及长度
        conn.setRequestProperty("Content-Type", "image/jpg; boundary=" + BOUNDARY);
        conn.setRequestProperty("Content-Length", (headerInfo.length + uploadFile.length() + endInfo.length) + "");
        conn.setDoOutput(true);
        OutputStream out = conn.getOutputStream();

        InputStream in = new FileInputStream(uploadFile);
        //写入的文件长度
        int count = 0;
        //文件的总长度
        int available = in.available();
        // 写入头部 (包含了普通的参数,以及文件的标示等)
        out.write(headerInfo);
        // 写入文件
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) != -1) {
            out.write(buf, 0, len);
            count += len;
            int progress = count * 100 / available;
            Log.d(TAG, "上传进度: " + progress + " %");
//            updateProgress(progress);
        }
        // 写入尾部
        out.write(endInfo);
        in.close();
        out.close();
        if (conn.getResponseCode() == 200) {
            System.out.println("文件上传成功");
            String result = stream2String(conn.getInputStream());
            Log.d(TAG, "uploadForm: " + result);
        }

    }

    public static String stream2String(InputStream is) {
        int len;
        byte[] bytes = new byte[1024];
        StringBuffer sb = new StringBuffer();
        try {
            while ((len = is.read(bytes)) != -1) {
                sb.append(new String(bytes, 0, len));
            }
            is.close();
            return sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}

使用

    private static final String TAG = "MainActivity";

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.click:

                new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        uploadFile();
                    }
                }.start();

                break;
        }
    }


    private void uploadFile() {
        String filePath = Environment.getExternalStorageDirectory() + File.separator + "aa.jpg";
        File file = new File(filePath);
        if (file.exists()) {
            Log.d(TAG, "exists: " + true);
        }


        String url = "http://yun918.cn/study/public/file_upload.php";
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("key", "img");
        try {//String fileFormName, File uploadFile,  String urlStr
            UploadFile.uploadFile(hashMap, file.getName(), file, url);


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
···

#下载

public class Main3Activity extends AppCompatActivity implements View.OnClickListener {

/**
 * 下载
 */
private Button mClick;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);
    initView();

    if (Build.VERSION.SDK_INT >= 23) {
        int REQUEST_CODE_CONTACT = 101;
        String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
        //验证是否许可权限
        for (String str : permissions) {
            if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
                //申请权限
                this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
                return;
            }
        }
    }
}
private static final String TAG = "MainActivity";
private final String DEFAULT_TARGET_FOLDER_PATH = Environment.getExternalStorageDirectory() + File.separator;

private void doHttpTask(String  fileUrl) {
    try {

// /sdcar/0/xx.png
String name = fileUrl.substring(fileUrl.lastIndexOf("/")+1);
File file = new File(DEFAULT_TARGET_FOLDER_PATH+name);
FileOutputStream fileOutputStream = new FileOutputStream(file);
HttpURLConnection connection = getConnection(fileUrl);
InputStream inputStream = connection.getInputStream();

        byte[] bytes = new byte[8*1024];
        int hasRead;
        while ((hasRead = inputStream.read(bytes)) > 0) {
            fileOutputStream.write(bytes, 0, hasRead);

            Log.d(TAG, "doHttpTask: 当次写入=--"+hasRead);
        }
            fileOutputStream.close();
            inputStream.close();
            connection.disconnect();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
    }
}

public static HttpURLConnection getConnection(String fileUrl) throws IOException {
    URL url = new URL(fileUrl);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(10*1000);
    conn.setRequestMethod("GET");
    conn.setRequestProperty("Accept", "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("Accept-Language", "zh-CN");
    conn.setRequestProperty("Charset", "UTF-8");
    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("Connection", "Keep-Alive");

// conn.setRequestProperty("Accept-Encoding", "identity");
return conn;
}
private void initView() {
mClick = (Button) findViewById(R.id.click);
mClick.setOnClickListener(this);
}
private String apk_url = "https://ws1.sinaimg.cn/large/0065oQSqgy1fze94uew3jj30qo10cdka.jpg";

@Override
public void onClick(View v) {
    switch (v.getId()) {
        default:
            break;
        case R.id.click:
            new Thread(){
                @Override
                public void run() {
                    super.run();
                    doHttpTask("https://ws1.sinaimg.cn/large/0065oQSqgy1fze94uew3jj30qo10cdka.jpg");
                }
            }.start();
            break;
    }
}

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.创建文件 二.在.m文件中添加 //URL上传接口 fileName图片名称 data图片的数据流 +(...
    Lemontree_8d6d阅读 2,937评论 0 1
  • 人要有梦。 梦,超越现实;梦,能力无限。 梦,能让喑哑者辩才无碍,能让残障者自由飞升。 梦者,超越现实之美好理想之...
    极乐佛吉阅读 895评论 0 1
  • 用了七年的日记网搬家后不再能写文章,这是我开辟新地方的最大原因。时间节点恰好在婚前婚后可以发散联想是我作为女...
    萍萍pinger阅读 228评论 0 1
  • 浏览器缓存和压缩优化技术 启用浏览器缓存 http缓存模型中,如果请求成功会有三种情况 200 from cach...
    谢凌阅读 360评论 0 0
  • 前天晚上,准备睡觉时,突然想起有个快递还在快递柜,然后就收获了一树桂花香。 桂花的香气其实很浓烈,距离桂花树还有很...
    家有俩男宝阅读 204评论 0 0