第一点:Android端代码先引入权限
//网络权限android:name="android.permission.INTERNET"> //相册权限android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
第二点:Android端在build.gradle里面引入依赖注入
//ok_go的依赖 //必须使用 compile 'com.lzy.net:okgo:3.0.4'
第三点:建立一个将uri转成url的类
public class Utils { /** * 这个是将跳转到相册返回的uri转换成写文件或者读成文件的url的,就是new File(url)时候,不能使用uri * * @param context 上下文对象 * @param uri 当我们跳转到相册时候给我们返回来的地址,例如 content://media/external/images/media/124238 * @return data 返回一个字符串,这个字符串就是真实的地址 */ public static String getRealFilePath(final Context context, final Uri uri) { if (null == uri) return null; final String scheme = uri.getScheme(); String data = null; if (scheme == null) data = uri.getPath(); else if (ContentResolver.SCHEME_FILE.equals(scheme)) { data = uri.getPath(); } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null); if (null != cursor) { if (cursor.moveToFirst()) { int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); if (index > -1) { data = cursor.getString(index); } } cursor.close(); } } return data; } }
第四点:随便你定义一个按钮button进行提交图片使用匿名内部类的方式进行上传图片的方法
//真正的提交 addProjectLL.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { OkGo.post(BASE_HOSE + "/pic/upload")// .tag(this)// .isMultipart(true) .params("uploadFile", new File(realFilePath)) .execute(new StringCallback() { @Override public void onSuccess(Response response) { Toast.makeText(getActivity(), response.body().toString(), Toast.LENGTH_SHORT).show(); } }); } });
第五点:服务端的代码首先要有多媒体解析,所以要在Spring的配置文件中配置多媒体解析器
第六点:服务器端Web层的代码编写
@Controller
public class PicturController {
@Value("${IMAGE_SERVER_URL}")
private String IMAGE_SERVER_URL;
@Autowired
private HttpServletRequest request;
@RequestMapping("/pic/upload")
@ResponseBody
public Map uploadFile(MultipartFile uploadFile) {
// 把图片上传到图片服务器,
try {
FastDFSClient fastDFSClient = new FastDFSClient(
"classpath:conf/client.conf");
String originalFilename = uploadFile.getOriginalFilename();
String extName = originalFilename.substring(originalFilename
.lastIndexOf(".") + 1);
// 取文件扩展名
String url = fastDFSClient.uploadFile(uploadFile.getBytes(),
extName);
url = IMAGE_SERVER_URL + url;
System.out.println(url);
Map result = new HashMap<>();
result.put("error", 0);
result.put("url", url);
return result;
} catch (Exception e) {
e.printStackTrace();
Map result = new HashMap<>();
result.put("error", 1);
result.put("message", "图片上传失败");
return result;
}
}
}
Android端代码地址https://github.com/lovepaul/e3mall_m.git