电商项目文件上传

上传头像

接口地址:https://www.zhaoapi.cn/file/upload

返回格式:json

请求方式:get/post

接口备注:上传头像接口(file路径修改)

请求参数说明:

名称

类型

必填

说明

uid

string

用户id

file

File

文件

代码

1.apI接口声明

@Multipart

@POST("file/upload")

Call 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 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接收文件):

这个接口key的值为“file”

2.上传文件需要制定文件的名字

3.上传文件需要指定文件的类型

4.参数类型为 MultipartBody.Part  使用@Part修饰

---------------------------------------

多文件上传参考  (可行)

https://www.jb51.net/article/122419.htm

Uri转化成File (用来解决相册选择视频拿到的是Uri的问题)

https://blog.csdn.net/jenly121/article/details/48373861

你可能感兴趣的:(IT开发,电商项目进阶)