Android端通过HttpURLConnection上传文件到服务器
发布时间:2020-12-15 03:13:47 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 服务器端HTTP API, 我是基于Spring3 MVC实现的Controller,代码如下: @RequestMapping(value = "/uploadMyImage/{token}",method = RequestMethod.P
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 服务器端HTTP API, 我是基于Spring3 MVC实现的Controller,代码如下: @RequestMapping(value = "/uploadMyImage/{token}",method = RequestMethod.POST) public @ResponseBody String getUploadFile(HttpServletRequest request,HttpServletResponse response,@PathVariable String token) { logger.info("spring3 MVC upload file with Multipart form"); logger.info("servlet context path : " + request.getSession().getServletContext().getRealPath("/")); UserDto profileDto = userService.getUserByToken(token); String imgUUID = ""; try { if (request instanceof MultipartHttpServletRequest && profileDto.getToken() != null) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; logger.info("spring3 MVC upload file with Multipart form"); // does not work,oh my god!! MultipartFile file = multipartRequest.getFiles("myfile").get(0); InputStream input = file.getInputStream(); long fileSize = file.getSize(); BufferedImage image = ImageIO.read(input); // create data transfer object ImageDto dto = new ImageDto(); dto.setCreateDate(new Date()); dto.setFileName(file.getOriginalFilename()); dto.setImage(image); dto.setCreator(profileDto.getUserName()); dto.setFileSize(fileSize); dto.setType(ImageAttachmentType.CLIENT_TYPE.getTitle()); dto.setUuid(UUID.randomUUID().toString()); /// save to DB imgUUID = imageService.createImage(dto); input.close(); } } catch (Exception e) { e.printStackTrace(); logger.error("upload image error",e); } return imgUUID; } package com.demo.http; import java.io.BufferedInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Random; import android.os.Handler; import android.util.Base64; import android.util.Log; public class UploadImageTask implements APIURLConstants { private String requestURL = DOMAIN_ADDRESS + UPLOAD_DESIGN_IMAGE_URL; // default private final String CRLF = "rn"; private Handler handler; private String token; public UploadImageTask(String token,Handler handler) { this.handler = handler; this.token = token; } public String execute(File...files) { InputStream inputStream = null; HttpURLConnection urlConnection = null; FileInputStream fileInput = null; DataOutputStream requestStream = null; handler.sendEmptyMessage(50); try { // open connection URL url = new URL(requestURL.replace("{token}",this.token)); urlConnection = (HttpURLConnection) url.openConnection(); // create random boundary Random random = new Random(); byte[] randomBytes = new byte[16]; random.nextBytes(randomBytes); String boundary = Base64.encodeToString(randomBytes,Base64.NO_WRAP); /* for POST request */ urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.setUseCaches(false); urlConnection.setRequestMethod("POST"); long size = (files[0].length() / 1024); if(size >= 1000) { handler.sendEmptyMessage(-150); return "error"; } // 构建Entity form urlConnection.setRequestProperty("Connection","Keep-Alive"); urlConnection.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary); urlConnection.setRequestProperty("Cache-Control","no-cache"); // never try to chunked mode,you need to set a lot of things // if(size > 400) { // urlConnection.setChunkedStreamingMode(0); // } // else { // urlConnection.setFixedLengthStreamingMode((int)files[0].length()); // } // end comment by zhigang on 2016-01-19 /* upload file stream */ fileInput = new FileInputStream(files[0]); requestStream = new DataOutputStream(urlConnection.getOutputStream()); String nikeName = "myfile"; requestStream = new DataOutputStream(urlConnection.getOutputStream()); requestStream.writeBytes("--" + boundary + CRLF); requestStream.writeBytes("Content-Disposition: form-data; name="" + nikeName + ""; filename="" + files[0].getName() + """+ CRLF); requestStream.writeBytes("Content-Type: " + getMIMEType(files[0]) + CRLF); requestStream.writeBytes(CRLF); // 写图像字节内容 int bytesRead; byte[] buffer = new byte[8192]; handler.sendEmptyMessage(50); while((bytesRead = fileInput.read(buffer)) != -1) { requestStream.write(buffer,bytesRead); } requestStream.flush(); requestStream.writeBytes(CRLF); requestStream.flush(); requestStream.writeBytes("--" + boundary + "--" + CRLF); requestStream.flush(); fileInput.close(); // try to get response int statusCode = urlConnection.getResponseCode(); if (statusCode == 200) { inputStream = new BufferedInputStream(urlConnection.getInputStream()); String imageuuId = HttpUtil.convertInputStreamToString(inputStream); Log.i("image-uuid","uploaded image uuid : " + imageuuId); handler.sendEmptyMessage(50); return imageuuId; } } catch (Exception e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if(requestStream != null) { try { requestStream.close(); } catch (IOException e) { e.printStackTrace(); } } if(fileInput != null) { try { fileInput.close(); } catch (IOException e) { e.printStackTrace(); } } if (urlConnection != null) { urlConnection.disconnect(); } } handler.sendEmptyMessage(50); return null; } private String getMIMEType(File file) { String fileName = file.getName(); if(fileName.endsWith("png") || fileName.endsWith("PNG")) { return "image/png"; } else { return "image/jpg"; } } }经过本人测试,效果杠杠的!!所以请忘记HttpClient这个东西,android开发再也不需要它了。 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |