android无法将图片上传到服务器

时间:2016-12-19 11:41:09

标签: android image server

我是android的新手。从最近几天起,我遇到了将图像发送到服务器的问题。我只是有一个表格,包括一些文本字段和图像从库中取出。除了图像上传外,一切都很完美。我在google上尝试了大部分教程。主要问题是logcat没有显示任何错误。我无法跟踪什么实际上出了问题。 这就是我所做的

我使用此代码从galary中获取Image

 private void showFileChooser() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
    }

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

        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
            filePath = data.getData();
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                schoolLogoUpload.setImageBitmap(bitmap);

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

我写了这个函数来将所选图像发送到服务器

public String getPath(Uri uri) {
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        String document_id = cursor.getString(0);
        document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
        cursor.close();

        cursor = getContentResolver().query(
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
        cursor.moveToFirst();
        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        cursor.close();

        return path;
    }


public void uploadMultipart() {
        //getting the actual path of the image
        String path = getPath(filePath);

        //Uploading code
        try {
            String uploadId = UUID.randomUUID().toString();

            //Creating a multi part request
            new MultipartUploadRequest(this, uploadId, UPLOAD_URL)
                    .addFileToUpload(path, "image") //Adding file
                    .setNotificationConfig(new UploadNotificationConfig())
                    .setMaxRetries(2)
                    .startUpload(); //Starting the upload

        } catch (Exception exc) {
            Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }

这是我在服务器端接收图像数据的代码

if(Input::hasFile('image')) {
            $file = Input::file('image');
            $destination_path = "uploads";
            $extension = Input::file('image')->getClientOriginalExtension();
            $file_name = str_random(20). "." . $extension;
            Input::file('image')->move($destination_path, $file_name);
        }else{
            return \Response::json([
                "error"=>["message"=>"Please select the college logo"]
            ], 404);

1 个答案:

答案 0 :(得分:1)

我假设您已将图片转换为Base64格式。基本上Base64格式将图像(或编码图像)转换为String格式。

*撰写Asynctask,将图片上传到服务器*

以下是Asynctask: -

private class AsyncUploadToServer extends AsyncTask<String, Void, String>
{
    ProgressDialog pdUpload;

    String imageData = "";

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pdUpload = new ProgressDialog(MainActivity.this);
        pdUpload.setMessage("Uploading...");
        pdUpload.show();
    }

    @Override
    protected String doInBackground(String... params)
    {
        imageData = params[0];
        HttpClient httpclient = new DefaultHttpClient();

        // URL where data to be uploaded
        HttpPost httppost = new HttpPost(YOUR_URL_HERE);

        try
        {
            // adding data
            List<NameValuePair> dataToBeAdd = new ArrayList<>();
            dataToBeAdd.add(new BasicNameValuePair("uploadedImage", imageData));
            httppost.setEntity(new UrlEncodedFormEntity(dataToBeAdd));

            // execute http post request
            HttpResponse response = httpclient.execute(httppost);
            Log.i("MainActivity", "Response: " + response);
        }
        catch (ClientProtocolException ex)
        {
            ex.printStackTrace();
        }
        catch (IOException ioe)
        {
            ioe.printStackTrace();
        }
        return "";
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        pdUpload.dismiss();
        Toast.makeText(getApplicationContext(), "Image Uploaded Successfully..!!", Toast.LENGTH_SHORT).show();
    }
}

希望这会对你有所帮助。 : - )

P.S。: - 如果你不太了解asynctask,那么链接https://developer.android.com/reference/android/os/AsyncTask.html