在我的应用程序中从图库上传图像?

时间:2017-12-25 19:20:22

标签: android android-intent android-image

我一直在与一个特定问题作斗争一个多星期了。我希望能够将我的PicturesApp / File Explorer中的图像共享到我的应用程序中,然后发布到私人服务器。 在借助MultiImage Selector Library从应用程序内部导航到图库时,图像已经发布。 我已经尝试了我在这里遇到的所有答案都无济于事,包括here引用的着名FileUtils类  在我的研究过程中,我发现在应用程序中处理数据方面有很多灰色区域,文档的简洁性(最终导致模糊性)以及随之而来的一堆未解决的问题。 现在来一些代码

    <provider
        android:name="android.support.v4.content.FileProvider"
        tools:replace= "android:authorities"
        android:authorities="com.myapp.PhotoViewerActivity"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            tools:replace= "android:resource"
            android:resource="@xml/file_paths" />
    </provider>

          <activity
        android:name="com.myapp.activity.AppActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
        </activity>

清单

我包含了文件提供程序,因为我想知道这是否覆盖了我阅读内容的能力:// uris或者其他东西..

我处理意图;

            final Intent shareIntent = getIntent();
          if (shareIntent.getAction()!=null) {
                 final String intentAction = shareIntent.getAction();
                 final String intentFileType = shareIntent.getType();

                      if (intentAction.equals(Intent.ACTION_SEND)) {
                                 if (intentFileType.startsWith("image/")) {
                                    byte[] imageBytes = null;
                                    Uri uri = (Uri) shareIntent.getParcelableExtra(Intent.EXTRA_STREAM);
                                    try {
                                        InputStream inputStream = getContentResolver().openInputStream(uri);
                                        imageBytes= getBytes(inputStream);
                                    } catch (FileNotFoundException e) {
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                        e.printStackTrace();
                                    }

                                    RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), imageBytes);
                                    image1 = MultipartBody.Part.createFormData("image1", "new_image", requestFile);
       }
    }
   }
     public byte[] getBytes(InputStream is) throws IOException{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int buffSize =1024;
    byte[] buff = new byte[buffSize];
    int len=0;
    while((len =  is.read(buff))!= -1){
        baos.write(buff,0,len);
    }
    return baos.toByteArray();
}

活动

Ps:我已经处理了权限。就像我说我现在可以从应用程序发布图片。对于此特定功能,服务器说&#34;文件不存在&#34;

1 个答案:

答案 0 :(得分:0)

单击图库按钮,启动startActivityForResult,如下所示:

startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), GET_FROM_GALLERY);

检查此链接

How to upload image from gallery in android