android 图片上传到java服务器,Android上传图片到服务器并显示(后台用Java处理)

Android上传图片(Android Studio)

Fragment界面:

private String img_src;

/**

* 从相册选取图片

*/

public void selectImg() {

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");

startActivityForResult(intent, SELECT_PHOTO);

}

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

case SELECT_PHOTO:

switch (resultCode) {

case RESULT_OK:

Uri uri = data.getData();

img_src = uri.getPath();//这是本机的图片路径

ContentResolver cr = getActivity().getContentResolver();

try {

Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));

/* 将Bitmap设定到ImageView */

imageView.setImageBitmap(bitmap);

String[] proj = {MediaStore.Images.Media.DATA};

CursorLoader loader = new CursorLoader(getContext(), uri, proj, null, null, null);

Cursor cursor = loader.loadInBackground();

if (cursor != null) {

int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

cursor.moveToFirst();

img_src = cursor.getString(column_index);//图片实际路径

}

cursor.close();

} catch (FileNotFoundException e) {

Log.e("Exception", e.getMessage(), e);

}

break;

}

break;

}

}

public void uploadImage(String path) {

new Thread(new Runnable() {

@Override

public void run() {

String uploadurl = SharedPreferencesUtil.getServerUrls(getActivity()) + "mobileqrcode/uploadsignimg.html";

try {

File file = new File(img_src);

result = UploadUtil.uploadImage(file, uploadurl);

} catch (Exception e) {

e.printStackTrace();

}

}

}).start();

}

上传文件工具类:

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  请求的url

* @return 返回响应的内容

*/

public static String uploadImage(File file, String RequestURL) {

String result = "error";

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

conn.connect();

if (file != null) {

//当文件不为空,把文件包装并且上传

DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

/*StringBuilder sb = new StringBuilder();

sb.append(PREFIX);

sb.append(BOUNDARY);

sb.append(LINE_END);

*//*

* 这里重点注意:

* name里面的值为服务器端需要key,只有这个key才可以得到对应的文件

* filename是文件的名字,包含后缀名的。比如:abc.png

*//*

sb.append("Content-Disposition: form-data; name=\"inputName\"; filename=\"" + file.getName() + "\"" + LINE_END);

//sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END);

//sb.append("Content-Type: " + getMIMEType(file) + LINE_END);

sb.append(LINE_END);

dos.write(sb.toString().getBytes());*///此写法会导致无法上传

dos.writeBytes(PREFIX + BOUNDARY + LINE_END);

dos.writeBytes("Content-Disposition: form-data; " + "name=\"inputName\";filename=\"" + file.getName() + "\"" + LINE_END);

dos.writeBytes(LINE_END);

FileInputStream is = new FileInputStream(file);

byte[] bytes = new byte[1024];

int len = -1;

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

StringBuilder sbs = new StringBuilder();

int ss;

while ((ss = input.read()) != -1) {

sbs.append((char) ss);

}

result = sbs.toString();

Log.i(TAG, "result------------------>>" + result);

}

}

} catch (IOException e) {

e.printStackTrace();

}

return result;

}

private static String getMIMEType(File file) {

String fileName = file.getName();

if (fileName.endsWith("png") || fileName.endsWith("PNG")) {

return "image/png";

} else {

return "image/jpg";

}

}

}

Java端接收图片(Eclipse)

@RequestMapping(value = "/uploadsignimg", method = RequestMethod.POST)

public void uploadOrderSignImage(HttpServletRequest request, HttpSession session, HttpServletResponse response) {

try {

MultipartHttpServletRequest rq = (MultipartHttpServletRequest) request;

Mapfile_list = rq.getFileMap();

if (file_list != null && file_list.size() > 0) {

if (file_list.containsKey("inputName")) {

MultipartFile file = file_list.get("inputName");

if (file != null) {

// 保存订单签收图片

String fileName = file.getOriginalFilename();

String newFileName = "";

String[] desp = fileName.split("\\.");

if (desp != null && desp.length > 0) {

String extendName = desp[desp.length - 1];

newFileName = new Date().getTime() + "." + extendName;

ServletContext servletContext = request.getSession().getServletContext();

String uploadPath = servletContext.getRealPath("/") + "upload\\";

File saveFile = new File(uploadPath, newFileName);

file.transferTo(saveFile);

}

session.setAttribute("newfilename", newFileName);

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值