接口地址:https://www.zhaoapi.cn/file/upload
名称 | 类型 | 必填 | 说明 |
uid | string | 是 | 用户id |
file | File | 是 | 文件 |
代码
1.apI接口声明
@Multipart
@POST("file/upload")
Call<Bean> upLoad(@Query("uid") String uid, @Part MultipartBody.Part part);
2.代码构造 MultipartBody.Part
LoginApi loignApi = RetrofitManager.getDefault().create(LoginApi.class);
File file = getFile();
//RequestBody封装了文件和文件的类型
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
// MultipartBody.Part封装了接受的key和文件名字和RequestBody
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);
Call<Bean> login = loignApi.upLoad("71", part);
3.本地图片资源转换成File
public class Utils {
/**
* bitmap转file
*
* @param bitmap
* @return
*/
public static File compressImage(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 100;
while (baos.toByteArray().length / 1024 > 500) { //循环判断如果压缩后图片是否大于500kb,大于继续压缩
baos.reset();//重置baos即清空baos
options -= 10;//每次都减少10
bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
long length = baos.toByteArray().length;
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date(System.currentTimeMillis());
String filename = format.format(date);
File file = new File(Environment.getExternalStorageDirectory(), filename + ".png");
try {
FileOutputStream fos = new FileOutputStream(file);
try {
fos.write(baos.toByteArray());
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
recycleBitmap(bitmap);
return file;
}
private static void recycleBitmap(Bitmap bitmap) {
if (bitmap != null) {
bitmap.recycle();
}
}
}
备注:
1.上传文件需要制定文件对应的的key(服务器根据这个key接收文件):
4.参数类型为 MultipartBody.Part 使用@Part修饰
---------------------------------------
https://www.jb51.net/article/122419.htm
Uri转化成File (用来解决相册选择视频拿到的是Uri的问题)