首页 > 解决方案 > 无法使用改造 2 在服务器上上传图像

问题描述

我正在尝试在 django restapi 上上传图像,但我一次又一次地遇到相同的错误。这是我在 stackoverflow 上的第一个问题,如果发生一些错误,请原谅。

错误 :

I/Adreno: PFP: 0x005ff113, ME: 0x005ff066
I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
    android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Swap behavior 2

D/path to file: /storage/emulated/0/Pictures/20210318_1302565478385964844159819.jpg

I/Timeline: Timeline: Activity_launch_request time:81856604 intent:Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 clip={text/uri-list U:content://com.example.captureImage.fileprovider/myImages/20210318_1302565478385964844159819.jpg} (has extras) }

W/Activity: Slow Operation: Activity com.example.captureimage/.MainActivity onActivityResult took 367ms

W/Looper: Slow Looper main: doFrame is 379ms late because of 2 msg, msg 2 took 377ms (late=14ms h=android.app.ActivityThread$H w=159)

D/NetworkSecurityConfig: No Network Security Config specified, using platform default

W/le.captureimag: Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (light greylist, reflection)

    Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (light greylist, reflection)

    Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (light greylist, reflection)
I/le.captureimag: ProcessProfilingInfo new_methods=1973 is saved saved_to_disk=1 resolve_classes_delay=8000

D/failed !!!!!!: java.net.SocketTimeoutException: failed to connect to /10.0.2.2 (port 8000) from /192.168.43.2 (port 40471) after 10000ms

构建.gradle 文件:

   dependencies {
    
        implementation 'androidx.appcompat:appcompat:1.2.0'
        implementation 'com.google.android.material:material:1.3.0'
        implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
        testImplementation 'junit:junit:4.+'
        androidTestImplementation 'androidx.test.ext:junit:1.1.2'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
        implementation 'com.squareup.retrofit2:retrofit:2.5.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
        implementation 'com.google.code.gson:gson:2.6.2'
    
       
    }

文件上传服务提供者.java

public interface FileUploadService {
    @Multipart
    @POST("upload")

  
    Call<RequestBody> upload(
            @Part("description") RequestBody description,
            @Part MultipartBody.Part file);


}

网络客户端.JAVA

公共类 NetworkClient {

private static Retrofit retrofit;
private static final String BASE_URL = "http://10.0.2.2:8000/";

public  static Retrofit getRetrofit()
{
    OkHttpClient okHttpClient = new OkHttpClient.Builder().build();

    if(retrofit == null)
        retrofit = new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).client(okHttpClient).build();

    return retrofit;
}

}

MAINACTIVITY.JAVA

public class MainActivity extends AppCompatActivity {

    String pathToFile;
    Button capture_Picture;
    Button saveImage;
    ImageView photo_Box;
    String filepath ="";
    private Object ServiceGenerator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(Build.VERSION.SDK_INT >=23)
        {
            requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},2);
        }



        capture_Picture = findViewById(R.id.click_Picture);
        saveImage = findViewById(R.id.save_Picture);
        photo_Box = findViewById(R.id.image);

        saveImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                uploadImage();

            }
        });



        capture_Picture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dispatchPictureTakeAction();
            }
        });

    }

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

        if(resultCode == RESULT_OK)
        {
            if(requestCode == 1)
            {
                Bitmap bitmap = BitmapFactory.decodeFile(pathToFile);
                photo_Box.setImageBitmap(bitmap);
            }
        }

    }

    private void dispatchPictureTakeAction()
    {
        Intent takePic = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if(takePic.resolveActivity(getPackageManager() )!= null)
        {
            File photoFile = null;

            photoFile = createPhotoFile();


            if(photoFile != null)
            {
                pathToFile = photoFile.getAbsolutePath();
                Log.d("path to file",pathToFile);
                Uri photoURI = FileProvider.getUriForFile(MainActivity.this,"com.example.captureImage.fileprovider",photoFile);
                takePic.putExtra(MediaStore.EXTRA_OUTPUT,photoURI);
                startActivityForResult(takePic,1);
            }

        }


    }

    private File createPhotoFile()
    {
        String name = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File storageDir = getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File image = null;
        try {
            image = File.createTempFile(name,".jpg",storageDir);
        } catch (IOException e) {
            Log.d("mylog","Excep : " + e.toString());
        }

        return image;

    }

    private void uploadImage()
    {


        File file = new File(pathToFile);
        Retrofit retrofit = NetworkClient.getRetrofit();

        RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"),file);
        MultipartBody.Part parts = MultipartBody.Part.createFormData("file",file.getName(),requestBody);

        RequestBody somedata = RequestBody.create(MediaType.parse("description"),"this is a new Image");


        FileUploadService uploadApis = retrofit.create(FileUploadService.class);

        Call call = uploadApis.upload(somedata,parts);

        call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {



            }

            @Override
            public void onFailure(Call call, Throwable t) {

                Log.d("failed !!!!!!  ", ""+t);
            }
        });

    }



}

**Models class in django**

class myimage(models.Model):
    my_name=models.CharField(max_length=50)
    my_image= models.ImageField(upload_to='Images/',default='Images/None/No-img.jpg')

    def __str__(self):
        return self.my_name

在此先感谢,我已经尝试了 stackoverflow 上有关此问题的所有可用方法。

标签: androidretrofit2

解决方案


推荐阅读