0

ユーザーが画像をサーバーにアップロードできるようにするアプリケーションに取り組んでいます。500 内部サーバー エラーが発生しています。このエラーに関連して問題を解決できるものは何も見つかりません。私のコードは次のとおりです。

class RetreiveFeedTask extends AsyncTask<String, Void, String> {
    protected String doInBackground(String... url){
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
            Bitmap bitmap = drawable.getBitmap();
            bitmap.compress(CompressFormat.JPEG, 50, bos);
            byte[] data = bos.toByteArray();

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new HttpPost("http://10.155.103.167:9090/RestServer/rest/todos");
            String fileName = String.format("File_%d.jpg", new Date().getTime());
            ByteArrayBody bab = new ByteArrayBody(data, fileName);
            ContentBody mimePart = bab;

            // File file= new File("/mnt/sdcard/forest.png");
            // FileBody bin = new FileBody(file);

            MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

            reqEntity.addPart("file", bab);
            postRequest.setEntity(reqEntity);
            postRequest.setHeader("Content-Type", "application/json");
            int timeoutConnection = 60000;

            HttpParams httpParameters = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
            int timeoutSocket = 60000;
            HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
            HttpConnectionParams.setTcpNoDelay(httpParameters, true);
            HttpResponse response = httpClient.execute(postRequest);
            BufferedReader reader = new BufferedReader(new InputStreamReader(
            response.getEntity().getContent(), "UTF-8"));
            String sResponse;
            StringBuilder s = new StringBuilder();
            System.out.println("Response: " + response.getStatusLine());

            while ((sResponse = reader.readLine()) != null) {
                s = s.append(sResponse);
            }

            txt.setText("NEW TEXT"+s);
        } catch (Exception e) {
            // handle exception here
            e.printStackTrace();
            System.out.println(e.toString());
        }
        return null;
    }
}
4

2 に答える 2

1

すべての HTTP 5xx コードは、特にサーバー側の問題を示しています。のような 4xx エラーが発生していない400 Bad Request413 Request Entity Too Large、クライアント コードが何か間違っていることを示しています。サーバーで何か問題が発生しています (アップロード ディレクトリの構成ミスやデータベース接続の失敗など)。サーバー ログをチェックして、表示されているエラー メッセージを確認する必要があります。

于 2013-07-31T05:58:30.733 に答える
0

このコードを使用して画像をアップロードします

public class UploadToServer extends AsyncTask<String, String, String>{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... args){
        String status="";
        String URL = "";
       try{
             Log.d("Image Path ======",TakePicture.file.toString());
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(URL);
            File file = new File(TakePicture.file.toString());
            FileBody bin = new FileBody(file);
            MultipartEntity reqEntity = new MultipartEntity();
            reqEntity.addPart("Content-Disposition", new StringBody("form-data"));
            reqEntity.addPart("name", new StringBody("Test"));
            reqEntity.addPart("filename", bin);
            reqEntity.addPart("Content-Type", new StringBody("image/jpg"));
            httppost.setEntity(reqEntity);
            Log.d("Executing Request ",  httppost.getRequestLine().toString());
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity resEntity = response.getEntity();
            if (resEntity != null) {
                Log.d("Response content length: ",resEntity.getContentLength()+"");
                if(resEntity.getContentLength()>0) {
                    status= EntityUtils.toString(resEntity);
                } else {
                    status= "No Response from Server";
                    Log.d("Status----->",status);
                }
            } else {
                status = "No Response from Server";
                Log.d("Status----->",status);
            }
        } catch (Exception e) {
                e.printStackTrace();
                status = "Unable to connect with server";
         }
            return status;
      }

    @Override
    protected void onPostExecute(String status) {
         super.onPostExecute(status); 
    }
}
于 2013-07-31T05:53:47.443 に答える