首页 文章

将字符串路径转换为输入流

提问于
浏览
2

我正在使用Quickblox聊天API开发聊天应用程序并且目前已完成用户注册,身份验证和基本的对等聊天和群聊 . 现在正在实施视频,图像和文件发送但是已经在某些方面发生了变化 .

  • 从SD卡中选择图像 . 返回字符串中的图片路径,而不是转换为inputStream . 在SOF上尝试了大约10-15个答案 . 我的代码如下:
Intent i = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(i, RESULT_LOAD_IMAGE);

protected void onActivityResult(int requestCode,int resultCode,Intent data){super.onActivityResult(requestCode,resultCode,data);

if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {


    Uri selectedImage = data.getData();
    String[] filePathColumn = { MediaStore.Images.Media.DATA };

    Cursor cursor = getContentResolver().query(selectedImage,
            filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    cursor.close();

    Bitmap imagebitmap=BitmapFactory.decodeFile(picturePath);

    byte[] b=picturePath.getBytes(Charset.forName("UTF-8"));

    InputStream is = new ByteArrayInputStream(b);

    File newFile = FileHelper.getFileInputStream(is, "sample.jpg", "myFile");

    Boolean fileIsPublic = false;

    QBContent.uploadFileTask(newFile, fileIsPublic, null, new QBEntityCallbackImpl<QBFile>()
            {
        public void onSuccess(QBFile file, Bundle params) {

            //creating message

            QBChatMessage chatmessage=new QBChatMessage();
            chatmessage.setProperty("save_to_history", "1");    //saves messsage to history

            QBAttachment qbAttachment=new QBAttachment("photo");
            qbAttachment.setId(file.getId().toString());

            chatmessage.addAttachment(qbAttachment);

            try
            {
                chat.sendMessage(chatmessage);

                Toast.makeText(getApplicationContext(), "Image Uploaded Successfully", Toast.LENGTH_SHORT).show();

            } catch (XMPPException e) {
                Log.e(TAG, "failed to send a image", e);
            } catch (SmackException sme){
                Log.e(TAG, "failed to send a image", sme);
            }

        }

        public void onError(java.util.List<String> errors) {

            AlertDialog.Builder dialog = new AlertDialog.Builder(ChatActivity.this);
            dialog.setMessage("error when sending image: " + errors.toString()).create().show();


        };});}

我们也试过这些代码来生成输入流

  • InputStream is = new ByteArrayInputStream(picturePath.toString() . getBytes(Charset.defaultCharset()));

  • try { is = IOUtils.toInputStream(picturePath, "UTF-8"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }

content panel of quickblox shows this output... where size(kb) refers to static trial images i sent...and 1 kb size is dynamic images i selected.

代码在myfile文件夹中生成新的sample.jpg . 它没有创造 . 它坏了 . 但如果我选择静态,那么它的效果非常好 .

谢谢你 . 不知道我做错了什么......任何帮助都会非常明显2.我是

1 回答

  • 2

    经过大量的努力和代码改变,我完成了我所需要的 . 我没有使用inputstream,而是使用了ByteArrayInputStream . 首先将我的字符串picturepath转换为位图(不知道为什么我这样做..但确实如此)10使用以下代码将该位图转换为ByteArrayInputStream

    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
            imagebitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos); 
            byte[] bitmapdata = bos.toByteArray();
            ByteArrayInputStream bs = new ByteArrayInputStream(bitmapdata);
    

    并将结果发送给我的功能....成功.. !!!

相关问题