下载图片并且获取图片的原始名称(服务器端Android端)

Android端
下载图片并且获取图片的原始名称
我用了两种方式实现图片的下载 HttpURLConnection方式 和OKHTTP方式

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.down_picture);
        imageView = (ImageView) findViewById(R.id.ImageViewTest);
        progressBar = (ProgressBar)findViewById(R.id.progress);
        RandomString rs = new RandomString();
        Random = rs.RandomString();
        new MyAsyncTask().execute(URL);
    }

class MyAsyncTask extends AsyncTask<String,Void,Bitmap>{

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            progressBar.setVisibility(View.GONE);
            imageView.setImageBitmap(bitmap);

        }

        @Override
        protected Bitmap doInBackground(String... params) {
          //  DODownLoadImage();
            String url = params[0];
            Bitmap bitmap = DownUseHttpURLConnection(url);
            return bitmap;
        }
    }

    //HttpURLConnection方式
    public Bitmap DownUseHttpURLConnection(String url){
        URL imageUrl = null;
        Bitmap bitmap = null;
        try {
            imageUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)imageUrl
                    .openConnection();
            conn.setDoInput(true);//开启输入  setDoOutput(true) 开启输出
            conn.connect();
            InputStream is = conn.getInputStream();
            **//获取图片的名称
            Log.e("Picture name is",conn.getHeaderField("Content-Disposition"));
            FindName findName = new FindName();
            String re = findName.FindName(conn.getHeaderField("Content-Disposition"));
            Log.e("Name is",re);**
            bitmap = BitmapFactory.decodeStream(is);
            is.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    //Okhttp下载图片
    public void DODownLoadImage(){
        Request.Builder builder = new Request.Builder();
        final Request request = builder
                .get()
                .url(HttpStudy.mURl+"picture")
                .build();
        Call call = HttpStudy.client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("OnFailure: " ,e.getMessage());
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.e("OnResponse: " ,"ennnnnnnn");
                InputStream is = response.body().byteStream();
                int len = 0;
                File file = new File(Environment.getExternalStorageDirectory(),Random+".jpg");
                Log.e("Picture name is",response.headers().toString());
                byte[] buf = new byte[1024];
                FileOutputStream fos = new FileOutputStream(file);
                while((len=is.read(buf))!=-1){
                    fos.write(buf,0,len);
                }
                fos.flush();
                fos.close();
                is.close();
            }
        });
    }
    public void ReadFile() {
        File file = new File(Environment.getExternalStorageDirectory(), Random+".jpg");
        BufferedReader br;
        String path = Environment.getExternalStorageDirectory() + Random+".jpg";
        try {
            FileInputStream fileInputStream = new FileInputStream(Environment.getExternalStorageDirectory() + Random+".jpg");
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
            br = new BufferedReader(inputStreamReader);
            String line;
            StringBuilder builder = new StringBuilder();
            while ((line = br.readLine()) != null) {
                builder.append(line);
            }
            Log.e("String :      ", builder.toString());
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

由于从服务器获取的包含名称的字符串不光有图片名称,所以需要从里面获取一下自己所需要的那一串字符
从服务器获取的字符串为“attachment;filename=ye.jpg”
Android端处理:

public class FindName {
    private String returnString;
    private int start;
    private int end;
    public String FindName(String string){
        char[] chars = string.toCharArray();
        for(int i=0;i<string.length();i++){
            if('='==chars[i]) start = i;
            if('.'==chars[i]) end = i;
        }
        System.out.print(start);
        System.out.print(end);
        String s = new String(chars,start+1,end-start-1);
        System.out.print("Name is  "+ s);
        return s;
    }
}

服务器端:

FileImageInputStream fs;
        HttpServletResponse response = ServletActionContext.getResponse();
        String url = "E://project//LitterImage//ye.jpg";
        File file = new File(url);
        try {
            fs = new FileImageInputStream(file);
            int streamLenght = (int)fs.length();
            byte[] image = new byte[streamLenght];
            fs.read(image,0,streamLenght);
            fs.close();
            System.out.print("DOING");
            response.setHeader("Content-Type", "application/octet-stream");

            response.setHeader("Content-Disposition","attachment;filename="+file.getName());
            response.getOutputStream().write(image);
            response.getOutputStream().flush();
            response.getOutputStream().close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值