使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器

2024-05-18

我正在尝试使用 HttpUrlConnection 将 base64 编码的图像发送到服务器。我遇到的问题是大多数图像均已成功发送,但有些图像会生成 FileNotFound 异常。我的图像编码代码可以在下面找到。

public static String encodeImage(Bitmap thumbnail) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] b = baos.toByteArray();
            String imageEncoded = Base64.encodeToString(b,Base64.URL_SAFE);
            return imageEncoded;
        }

当我改变线路时:

String imageEncoded = Base64.encodeToString(b,Base64.URL_SAFE);

to:

String imageEncoded = Base64.encodeToString(b,Base64.DEFAULT);

然后大多数图像都会生成 FileNotFoundException,有些图像会成功发送到服务器。

下面是我的 HttpUrlConnection 的代码:

public class HttpManager {

    public static String getData(RequestPackage p) {

        BufferedReader reader = null;
        String uri = p.getUri();
        if (p.getMethod().equals("GET")) {
            uri += "?" + p.getEncodedParams();
        }

        try {
            URL url = new URL(uri);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod(p.getMethod());


            if (p.getMethod().equals("POST")) {
                con.setDoOutput(true);
                OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
                writer.write(p.getEncodedParams()); //Url encoded parameters
                writer.flush();
            }

            StringBuilder sb = new StringBuilder();
            reader = new BufferedReader(new InputStreamReader(con.getInputStream()));

            String line;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }

            return sb.toString();

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    return null;
                }
            }
        }

    }

}

任何帮助将不胜感激。 谢谢


我有同样的问题。只需使用下面的代码就可以了:

 public class MainActivity extends AppCompatActivity {

int SELECT_PICTURE = 101;
int CAPTURE_IMAGE = 102;
Button getImage;
ImageView selectedImage;
String encodedImage;
JSONObject jsonObject;
JSONObject Response;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getImage = (Button) findViewById(R.id.get_image);
    selectedImage = (ImageView) findViewById(R.id.selected_image);

    final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Profile Picture");
    builder.setMessage("Chooose from?");
    builder.setPositiveButton("GALLERY", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intent, SELECT_PICTURE);
        }
    });
    builder.setNegativeButton("CANCEL", null );


}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == SELECT_PICTURE) {
        // Make sure the request was successful
        Log.d("Vicky","I'm out.");
        if (resultCode == RESULT_OK && data != null && data.getData() != null) {
            Uri selectedImageUri = data.getData();
            Bitmap selectedImageBitmap = null;
            try {
                selectedImageBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImageUri);
            } catch (IOException e) {
                e.printStackTrace();
            }
            selectedImage.setImageBitmap(selectedImageBitmap);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            selectedImageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
            byte[] byteArrayImage = byteArrayOutputStream.toByteArray();
            encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
            Log.d("Vicky","I'm in.");
            new UploadImages().execute();
        }
    }
}

private class UploadImages extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected Void doInBackground(Void... params) {

        try {
            Log.d("Vicky", "encodedImage = " + encodedImage);
            jsonObject = new JSONObject();
            jsonObject.put("imageString", encodedImage);
            jsonObject.put("imageName", "+917358513024");
            String data = jsonObject.toString();
            String yourURL = "http://54.169.88.65/events/eventmain/upload_image.php";
            URL url = new URL(yourURL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST");
            connection.setFixedLengthStreamingMode(data.getBytes().length);
            connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
            OutputStream out = new BufferedOutputStream(connection.getOutputStream());
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
            writer.write(data);
            Log.d("Vicky", "Data to php = " + data);
            writer.flush();
            writer.close();
            out.close();
            connection.connect();

            InputStream in = new BufferedInputStream(connection.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    in, "UTF-8"));
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            in.close();
            String result = sb.toString();
            Log.d("Vicky", "Response from php = " + result);
            //Response = new JSONObject(result);
            connection.disconnect();
        } catch (Exception e) {
            Log.d("Vicky", "Error Encountered");
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void args) {

    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器 的相关文章

随机推荐

  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 在python中动态添加属性到__init__方法

    有什么方法可以定义一个函数 该函数可以在程序的稍后某个时刻向已经存在的属性添加新属性 init 方法 例如 下面我为家谱创建了一个类 每个实例都会创建一个根 class FamilyTree def init self rootObj se
  • 实体框架在种子数据库上插入重复项[重复]

    这个问题在这里已经有答案了 EDIT From here https stackoverflow com questions 22581889 seeding database entity framework 6我尝试在播种方法中分配 I
  • SQL Server 中高效的字符串后缀搜索?

    我想找到与谓词匹配的所有行MyColumn LIKE FooBar 但通过使用索引查找而不是扫描 一种方法本质上是创建 MyColumn 的反向版本并搜索反向模式 ooF 在该列上 在反向列上有一个常规索引 然而 我不喜欢手动创建这个反向列
  • Heroku 上的 Django 翻译无法完全正常工作

    我在 Heroku 上部署了 Django 应用程序 并添加了https github com piotras heroku buildpack gettext git此 ugettext 构建包和应用程序的某些部分已注释翻译 本地可以用
  • 在 C++ 中使用相同的方法调用类中的非成员函数

    我有一个带有名为的实例方法的类open并且需要调用C中声明的函数也称为open 遵循示例 void SerialPort open if open return fd open portName c str O RDWR O NOCTTY
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • SSDT SQL Server 数据库项目中用于架构比较的命令行/API?

    在 Visual Studio 2012 中 我们有Schema Compare http msdn microsoft com en us library hh272690 28v vs 103 29 aspx in SSDT http
  • 如何在通过 .ajaxForm() 提交表单之前执行一些操作?

    我正在使用 ajaxForm 框架来发送我的数据 而无需重新加载我的页面 ReplayForm ajaxForm success function data alert Success 现在 我想在提交表单之前检查一些条件 如果条件为假 则
  • matplotlibplot_surface命令的颜色条

    我修改了mplot3d示例代码 http matplotlib sourceforge net examples mplot3d surface3d demo2 html在保罗的帮助下完成我的申请 代码如下 from mpl toolkit
  • iOS 中的 CSV 逐行解析

    我正在 Objective c 中解析 CSV 文件 该文件包含如下内容 line 40 Rising searches line 41 nabi avc Breakout line 42 stonewall 700 line 43 med
  • 如何使用Python在Django for Windows中激活虚拟环境?

    我被告知要在 Django for Windows 中激活虚拟环境 我应该尝试 environment path Scripts activate 但是当我输入该命令时 cmd 返回此错误 该系统找不到指定的路径 我通过输入以下命令创建了虚
  • 如何使用 AFNetworking 2 按严格的顺序发送请求?

    我正在进行同步以将 sqlite 数据库镜像到服务器数据库 我有一个主从表 其中的详细信息必须尽快发送到服务器 但是 细节 3 可能会先于细节 2 到达 我需要模仿对文档执行的步骤并尊重操作的顺序 当记录保存在本地时 我会发送通知 然后发布
  • MySQL集群启动失败

    这不是我第一次创建ndbcluster 但我没有收到这样的问题 我正在关注本手册 https hub docker com r mysql mysql cluster by mysql团队 我正在使用回显的默认配置在此 GitHub 存储库
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • Alt 键快捷键在使用 Vim 的 gnome 终端上不起作用

    我在 gnome 终端上运行 Vim 但 alt 键映射不起作用 例如 imap
  • 具有更改用户代理上下文的 file_get_contents 不起作用

    我正在尝试获取页面的阅读数和点赞数 网址是 https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg 您必
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • Angular 4 过滤器搜索自定义管道

    所以我试图构建一个自定义管道来在 ngFor 循环中执行多个值的搜索过滤器 我花了几个小时寻找一个好的工作示例 其中大多数都是基于以前的版本 并且似乎不起作用 所以我正在构建管道并使用控制台为我提供值 但是 我似乎无法显示输入文本 以下是我
  • 使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器

    我正在尝试使用 HttpUrlConnection 将 base64 编码的图像发送到服务器 我遇到的问题是大多数图像均已成功发送 但有些图像会生成 FileNotFound 异常 我的图像编码代码可以在下面找到 public static