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