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

无法通过改装将图像上载到服务器

昝晗昱
2023-03-14

我目前正在做一个个人项目,我想上传一张个人资料图片到我的服务器上。通过以表单数据的形式发送图像,我可以轻松地将图像发送到带有postman的服务器上,但当我对其进行相同的改造时,它不起作用,有时它会创建一个1kb的文件,在打开时显示错误。

 Uri uri = data.getData();
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                profileImage.setImageBitmap(bitmap);


        
                File file = new File(uri.getPath());
                RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"),file);
                MultipartBody.Part body = MultipartBody.Part.createFormData("Profile", "bcs.jpeg", reqFile);
                authViewModel.setNewProfilePic(layout,email,body);
public void setNewProfilePic(RelativeLayout relativeLayout, String email,MultipartBody.Part part) {
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
        api = new Retrofit.Builder().baseUrl(Constants.URL_API).client(client).build().create(SpendistryAPI.class);
        retrofit2.Call<okhttp3.ResponseBody> req = api.setNewProfilePic(email,part);
        req.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                // Do Something
                if (!response.isSuccessful()) {
                    Toast.makeText(application, "notWorking: " + response.code(), Toast.LENGTH_SHORT).show();
                    return;
                }
                try {
                    Toast.makeText(application, response.body().string(), Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    Toast.makeText(application, "catch", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                t.printStackTrace();
            }
        });

如果我提供文件到请求Body.create喜欢,

File file = new File(uri.getPath());
RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"),file);

设置新配置文件pic的代码不会执行,如果我只传递URI。getPath()输入。create()方法id在服务器上创建无法打开的1kb图像文件。

请帮我解决这个问题,提前谢谢!!

共有1个答案

须彭亮
2023-03-14

我认为您可能没有授予读取外部存储权限uri。getPath()将不起作用,您必须从uri中找到一个真正的路径,才能使用此代码

private String getRealPathFromURI(Uri contentUri) {
        String[] proj = {MediaStore.Images.Media.DATA};
        CursorLoader loader = new CursorLoader(this, contentUri, proj, null, null, null);
        Cursor cursor = loader.loadInBackground();
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String result = cursor.getString(column_index);
        cursor.close();
        return result;
    }

现在,把这个字符串传给文件,否则代码就完美了!

FILE file = new file(getRealPathFromURI(uri));
 类似资料:
  • 我必须上传从用户首选的应用程序(Cameta,画廊等)选择后的图像文件。我可以在Imageview中显示结果意图为位图。现在我想上传这个图像后,一个按钮将被点击。我用改装来做到这一点。我跟随ImagePicker类将图像收集到我的Imageview中。 正在收集图像代码: 要将图像上载到服务器,我使用改装库 API接口 我的问题是,在将result intent中的Imageview设置为在服务器

  • 我正在通过我的Rails4应用程序中的CarrierWave将图像上传到AWS3的桶中。我也有Cloudfront设置,它目前为我的所有statis资产提供服务(不包括公共上传)。 我如何通过Cloudfront而不是S3服务上传的图像,即使它们存储在S3桶中?我已经找到了这样的教程,但是由于我已经有一个CloudFront发行版在运行,我想知道是否应该为我的公共映像上载添加另一个,或者有没有一种

  • 我想上传图像/文件到服务器使用它的uri使用下面的代码 所以,在这里我的回应是不成功的。API返回我内部服务器错误状态500,但我知道服务器工作良好(我测试了其他应用程序)。另外,文件uri也可以。我是新来的,所以能有人发现我的错误,并详细解释为什么是错误的。

  • 我正试图通过AWS PHP SDK将一个图像上传到我的S3 Bucket。对于我的EC2实例,我附加了一个角色,允许我的S3 Bucket使用PutObject和GetObject。因此,我不需要在创建S3Client时附加凭据。我还在学习。 这是我的PHP脚本: 我在这个表单中不断收到500个内部错误。显然错误发生在S3Client创建时,我不知道为什么。 进一步的探测证实,当我尝试实例化S3C

  • 我有一个问题上传文件到服务器(春季启动)从Android-改版。 这是我在Spring Boot中的代码。 这是在Android中 这是Spring Boot中的错误消息 但是,当我用邮递员的时候,它做得很好。 请告诉我问题是什么,如何解决

  • 当我尝试将对象内容上载到FTP服务器 [它的值从[T:InputFileUpload]组件中获取] 我的web浏览器中的加载指示器播放并且不会停止 调试时,我发现我的come在一行中冻结 但是我尝试了3个方法(如代码所示)来上载 ,但是所有方法仍然不工作 将文件上载到FTPServer控制器方法