这可能与您正在寻找的有点不同(因为它不直接使用 httpurlconnection),但如果您准备进行一些更改,或者它仍处于开发过程的早期(或者即使你不是),我建议你研究一下 Retrofit 来处理你所有的网络问题:http://square.github.io/retrofit/
如果你想这样做,你可以这样做:https://futurestud.io/blog/retrofit-how-to-upload-files/
我在自己的工作中做过类似的事情,但不能真正分享,所以我将从那篇文章中复制选定的部分代码。如您所见,这非常简单。
服务:
@Multipart
@POST("/upload")
void upload(@Part("myfile") TypedFile file,
@Part("description") String description,
Callback<String> cb);
提出请求:
FileUpload Service service = ServiceGenerator.createService(FileUpload.class, FileUpload.BASE_URL);
TypedFile typedFile = new TypedFile("multipart/form-data", new File("path/to/your/file"));
String description = "hello, this is description speaking";
service.upload(typedFile, description, new Callback<String>() {
@Override
public void success(String s, Response response) {
Log.e("Upload", "success");
}
@Override
public void failure(RetrofitError error) {
Log.e("Upload", "error");
}
});
再次,抱歉,如果这不能解决您的具体问题,但我认为它确实解决了您的“重新发明轮子以解决一个真正常见的问题”部分。