当前位置: 首页 > 知识库问答 >
问题:

使用Retrifit将内容包装在JSON中的文件上传到服务器

潘佐
2023-03-14
{“file_name”: “my_pic”, “content_base64”: “MKMD….”}
Bitmap bmp = BitmapFactory.decodeFile(localPath);
ByteArrayOutputStream outputStream= new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 80, outputStream);
byte[] byteArrayImage = outputStream.toByteArray();
String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);

JSONObject jObject = new JSONObject();

    try {
        jObject.put("file_name", "test.jpg");
        jObject.put("content_base64", encodedImage);
        String jObjectString = jObject.toString();
        URL url = new URL(serverPath);
        ...
        connection.setRequestMethod("PUT");
        connection.setUseCaches(false);
        OutputStreamWriter wr = new 
        OutputStreamWriter(connection.getOutputStream());
        wr.write(jObjectString);
        wr.close();
        ...
    }

有什么建议吗?

共有1个答案

文英达
2023-03-14

1.用请求和添加方法创建接口

public interface PostRequests {

      @PUT("your_url")
      Call<YourResponse> upload(@Body YourRequest yourRequest);

     }

2.为请求正文创建pojo

public class YourRequest {

    @SerializedName("file_name")
    @Expose
    private String fileName;

    @SerializedName("content_base64")
    @Expose
    private String picture;

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getPicture() {
        return picture;
    }

    public void setPicture(String picture) {
        this.picture = picture;
    }
}

3.初始化

public class Api {

private PostRequests mPostRequests;

public Api() {
mPostRequests = new Retrofit.Builder()
        .addConverterFactory(GsonConverterFactory.create())
        .baseUrl("your_base_url")
        .build()
        .create(PostRequests.class);
 }

public Call<YourResponse> upload(String localPath) {
     Bitmap bmp = null;
     try {
         bmp = BitmapFactory.decodeFile(localPath);
         ByteArrayOutputStream outputStream = new        ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 80, outputStream);
    byte[] byteArrayImage = outputStream.toByteArray();
    String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
    YourRequest yourRequest = new YourRequest();
    yourRequest.setFileName("test.jpg");
    yourRequest.setPicture(encodedImage);
    return mPostRequests.upload(yourRequest);
}finally {
    if(bmp!=null)
        bmp.recycle();
     }
 }

}
public void uploadMethod()
{
Api api=new Api();
api.upload("path").execute().body();// it is sync operation you can use eneque() for async
}
 类似资料:
  • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

  • 问题内容: 嗨,我正在尝试使用mono-service2从Visual Studio中运行库存Windows Service Project。我在单声道2.0的debian上运行它并进行编译。 我尝试从这里开始(我尝试将-d设置为应用程序的目录,并设置了-n,-m) 唯一的代码更改是添加测试写行 Service1.cs 结果就是这个错误 谢谢你的帮助 回答 我缺少LD_LIBRARY_PATH e

  • 我们有一个要求,我们应该提供能力上传文件多达100 GB的大小。当前的流程是将文件从客户端位置/本地系统放到应用服务器。然后,应用服务器将文件推送到Google Drive server中的服务帐户。我想知道是否有办法将文件从本地系统直接推送到Google Drive中的服务帐户。这将帮助我们不必在应用服务器中存储如此大的文件。请告诉我。还想知道我们是否可以在本地系统中安装指向服务帐户的驱动器。通

  • 如何将文件发送到WebService?为了上传文件,我需要使用multipart/form-data;我想知道如何使用PHP中的curl来实现这一点。 我的代码是: 服务器上的故障是: 我怎样才能解决这个问题?

  • 在Django python服务器上,我定制了一个用户可以上传文件的URL。现在的问题是,当我点击浏览器时,我能够成功地上传文件,但当我使用curl尝试同样的事情时,我无法做到这一点。 意见。派克 ........ ........ ........ ........ 名单。html 在浏览器上 在终点站,我试过了 我尝试了一些其他的变化,但似乎没有成功。我还尝试了一些其他命令,它们给出了“无cs

  • 问题内容: 以下是我用于将文件上传到服务器的代码。但是,即使经过几次尝试,甚至添加了严格模式,我都遇到了网络异常。 我是Android的新手,不知道如何使用异步任务,许多人建议您使用这种异步网络操作。谁能告诉我代码中哪里有错误以及应该在哪里使用异步任务? 问题答案: 有关更多信息,请参考此链接 http://vikaskanani.wordpress.com/2011/01/29/android-