Java Android Studio通过http将图片上传到自己的服务器:图片只有0字节

Java Android Studio通过http将图片上传到自己的服务器:图片只有0字节,java,php,android-studio,xampp,Java,Php,Android Studio,Xampp,我尝试通过android studio应用程序将图片上传到服务器。通过http上传到不同的服务器可以工作,但是当我尝试使用自己的服务器(我的笔记本)时,上传的图片有一个空名称和0字节。我用XAMPP创建了我的服务器。 我在android studio中的java代码是: public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final int

我尝试通过android studio应用程序将图片上传到服务器。通过http上传到不同的服务器可以工作,但是当我尝试使用自己的服务器(我的笔记本)时,上传的图片有一个空名称和0字节。我用XAMPP创建了我的服务器。 我在android studio中的java代码是:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final int RESULT_LOAD_IMAGE = 1;
    private static final String SERVER_ADRESS = "MY_IP_ADRESS";

    ImageView imageToUpload, downloadedImage;
    Button bUploadImage, bDownloadImage;
    EditText uploadImageName, downloadImageName;

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

        imageToUpload = (ImageView) findViewById(R.id.imageToUpload);
        downloadedImage = (ImageView) findViewById(R.id.downloadedImage);

        bUploadImage = (Button) findViewById(R.id.bUploadImage);
        bDownloadImage = (Button) findViewById(R.id.bDownloadImage);

        uploadImageName = (EditText) findViewById(R.id.etUploadName);
        downloadImageName = (EditText) findViewById(R.id.etDownloadName);

        imageToUpload.setOnClickListener(this);
        bUploadImage.setOnClickListener(this);
        bDownloadImage.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.imageToUpload:
                Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);
                break;

            case R.id.bUploadImage:
                Bitmap image = ((BitmapDrawable) imageToUpload.getDrawable()).getBitmap();
                new UploadImage(image, uploadImageName.getText().toString()).execute();
                break;

            case R.id.bDownloadImage:

                break;

        }

    }

    @Override
    protected void  onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) {
            Uri selectedImage = data.getData();
            imageToUpload.setImageURI(selectedImage);

        }
    }


    private class UploadImage extends AsyncTask<Void, Void, Void>{


        Bitmap image;
        String name;

        public UploadImage(Bitmap image, String name){
            this.image = image;
            this.name = name;
        }

        @Override
        protected Void doInBackground(Void... params) {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            image.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
            String encodedImage = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);

            ArrayList<NameValuePair> dataToSend = new ArrayList<>();
            dataToSend.add(new BasicNameValuePair("image", encodedImage));
            dataToSend.add(new BasicNameValuePair("name", name));

            HttpParams httpRequestParams = getHttpRequestParams();

            HttpClient client = new DefaultHttpClient(httpRequestParams);
            HttpPost post = new HttpPost("http://MY_IP_ADRESS/SavePicture.php");


            try {
                post.setEntity(new UrlEncodedFormEntity(dataToSend));
                client.execute(post);
            }catch (Exception e){
                e.printStackTrace();

            }

            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            Toast.makeText(getApplicationContext(), "Image Uploaded", Toast.LENGTH_SHORT).show();
        }

    }

    private HttpParams getHttpRequestParams(){
        HttpParams httpRequestParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpRequestParams, 100 * 30);
        HttpConnectionParams.setSoTimeout(httpRequestParams, 100 * 30);
        return httpRequestParams;

    }


}
public类MainActivity扩展AppCompatActivity实现View.OnClickListener{
私有静态最终整数结果\加载\图像=1;
私有静态最终字符串服务器\u address=“我的IP\u address”;
ImageView imageToUpload,下载IMAGE;
按钮bUploadImage,b下载图像;
EditText uploadImageName,downloadImageName;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageToUpload=(ImageView)findViewById(R.id.imageToUpload);
DownloadeImage=(ImageView)findViewById(R.id.DownloadeImage);
bUploadImage=(按钮)findViewById(R.id.bUploadImage);
bDownloadImage=(按钮)findViewById(R.id.bDownloadImage);
uploadImageName=(EditText)findViewById(R.id.etUploadName);
downloadImageName=(EditText)findViewById(R.id.etDownloadName);
imageToUpload.setOnClickListener(此);
bUploadImage.setOnClickListener(this);
bDownloadImage.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.imageToUpload:
Intent gallerycontent=新意图(Intent.ACTION\u PICK,MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI);
startActivityForResult(GalleryContent、RESULT\u LOAD\u IMAGE);
打破
案例R.id.bUploadImage:
位图图像=((BitmapDrawable)imageToUpload.getDrawable()).getBitmap();
新的UploadImage(image,uploadImageName.getText().toString()).execute();
打破
案例R.id.B下载图像:
打破
}
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==RESULT\u LOAD\u IMAGE&&resultCode==RESULT\u OK&&data!=null){
Uri selectedImage=data.getData();
设置图像URI(选择图像);
}
}
私有类UploadImage扩展异步任务{
位图图像;
字符串名;
公共上载图像(位图图像、字符串名称){
这个图像=图像;
this.name=名称;
}
@凌驾
受保护的Void doInBackground(Void…参数){
ByteArrayOutputStream ByteArrayOutputStream=新建ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);
字符串encodedImage=Base64.encodeToString(byteArrayOutputStream.toByteArray(),Base64.DEFAULT);
ArrayList dataToSend=新的ArrayList();
添加(新的BasicNameValuePair(“图像”,encodedImage));
添加(新的BasicNameValuePair(“name”,name));
HttpParams httpRequestParams=getHttpRequestParams();
HttpClient客户端=新的默认HttpClient(httpRequestParams);
HttpPost=新的HttpPost(“http://MY_IP_ADRESS/SavePicture.php");
试一试{
post.setEntity(新的UrlEncodedFormEntity(dataToSend));
客户。执行(post);
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
Toast.makeText(getApplicationContext(),“上传图像”,Toast.LENGTH\u SHORT.show();
}
}
私有HttpParams getHttpRequestParams(){
HttpParams httpRequestParams=新的BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams,100*30);
HttpConnectionParams.setSoTimeout(httpRequestParams,100*30);
返回httpRequestParams;
}
}
SavePicture.php是:

<?php

        $name = $_POST["name"];
        $image = $_POST["image"];

        $decodedImage = base64_decode("$image");
        file_put_contents("pictures/" . $name . ".JPG", $decodedImage);
?>


我不知道问题是什么。。。对于其他服务器,它可以正常工作。上传到我的服务器也可以,但是,正如我写的,只有0字节和emty名称

谢谢你的帮助!! 问候
Martin

能否尝试将应用程序/x-www-form-urlencoded内容类型添加到您的请求中谢谢!我试试看。我女朋友的wifi不起作用,但当我在家用ofn wifi启动服务器时,一切正常。不知道为什么:)但我也会尝试你的想法!谢谢,祝你今天愉快!