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

如何使用Multipart发布数据?

连文栋
2023-03-14

我开发了一个应用程序。在我的应用程序中,我从相机或画廊拍摄一张图像。我想使用多部分发布图像到服务器,但图像不发布它。我的帖子数据如下

{
     "suggested_item" :{
         "name": "apple",
         "description" : "nice apple", 
         "image": "image.png"
     }
  }
public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == PICK_FROM_CAMERA) {
    try{
        if(resultCode == -1){
            File file = new File(Environment.getExternalStorageDirectory()+File.separator +"image.png");
            bitmap = loadBitmap(file);
            iv_pic.setImageBitmap(bitmap);

        try {
            Uri tempUri = getImageUri(getActivity(), bitmap);
            Log.i(TAG,"onActivityResult PICK_FROM_CAMERA, tempUri : "+tempUri);

        //uploadFile(tempUri + "" + System.currentTimeMillis()+".png");
        } catch (Exception e) {
        e.printStackTrace();
        }
        }else{
        //setResult(RESULT_CANCELED);
        //Activity.this.finish();
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}else if (requestCode == PICK_FROM_GALLERY) {
        try{
           //Log.i(TAG,"onActivityResult PICK_FROM_GALLERY, data : "+data);
            if(data !=null){
                bitmap = null;
                try {
                    bitmap = new BitmapDrawable(MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), data.getData())).getBitmap();
                    iv_pic.setImageBitmap(bitmap);

                    try {
                        Uri tempUri = getImageUri(getActivity(), bitmap);
                        Log.i(TAG,"onActivityResult PICK_FROM_GALLERY, tempUri : "+tempUri);

                        //uploadFile(tempUri + "" + System.currentTimeMillis()+".png");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else{
                //setResult(RESULT_CANCELED);
                //Activity.this.finish();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

public Uri getImageUri(Context context , Bitmap bitmap) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG , 100 , bytes);
    String path = Images.Media.insertImage(context.getContentResolver() , bitmap , "Title" , null);
    return Uri.parse(path);
}

共有1个答案

虞展
2023-03-14

要发送二进制数据,需要使用MultiPartEntityBuilder的addBinaryBody方法。附件示例:

import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
//Image attaching
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
File file;
multipartEntity.addBinaryBody("someName", file, ContentType.create("image/jpeg"), file.getName());
//Json string attaching
String json;
multipartEntity.addPart("someName", new StringBody(json, ContentType.TEXT_PLAIN));

然后像往常一样提出请求:

HttpPut put = new HttpPut("url");
put.setEntity(multipartEntity.build());
HttpResponse response = client.execute(put);
int statusCode = response.getStatusLine().getStatusCode();
 类似资料:
  • 我正在尝试从我的电脑上传图像到一个使用Go的网站。通常,我使用一个bash脚本,向服务器发送一个文件和一个密钥:

  • 我试图使用Spring RestTemplate发布一个多部分/表单数据,并将字节数组作为上传文件,但它总是失败(服务器拒绝了不同类型的错误)。 我正在使用带有ByteArrayResource的MultiValueMap。是不是我漏了什么?

  • 我正在尝试使用curl向REST服务发布一个xml文件(utf-16编码)。REST服务需要“multipart/form-data”内容类型。 Curl脚本:Curl-k-i-h“content-type=multipart/form-data”-f“filename=@file.xml;type=text/xml”-x POST-u: 然而,我在运行脚本时得到500个内部服务器错误。 响应:<

  • 我从API23改为22,因为他们说httpclient不可用。当我切换到API22时,我遇到了HttpClient、HttpPost和NameValuePair的问题。我找到了使用HttpURLConnectionHandler的解决方案。但是我不知道如何将它用于下面的方法。 有人好心帮我一把

  • 问题内容: 我正在尝试使用Jetty将带有RestTemplate的文件上传到Raspberry Pi。在Pi上,正在运行一个servlet: 我能够成功卷曲 这是应该在webapp上具有相同功能的方法。 这是我得到的输出: ui-elements.html上传了! org.springframework.web.multipart.support.StandardMultipartHttpSer

  • 问题内容: 我正在一个ASP.NET MVC网站上工作,该网站的表单允许使用表单标签上的multipart / form data enctype选项上传文件,如下所示 我将如何编写此代码来代替进行ASP.NET MVC Ajax表单发布? 问题答案: 您可以使用其他一些上传器(例如jQuery多个文件上传器)(我更喜欢这种方式,而且我不喜欢使用MS Ajax) 采用: 但是在第二种情况下,我不确