Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件上载到.net c#服务器引发IOException_C#_Android - Fatal编程技术网

文件上载到.net c#服务器引发IOException

文件上载到.net c#服务器引发IOException,c#,android,C#,Android,*大家好, 我已尝试使用c#将文件上载到.net服务器。 我只是使用c:/inetpub/wwwroot作为服务器位置 我的java代码是 public class MainActivity extends Activity { InputStream inputStream; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan

*大家好, 我已尝试使用c#将文件上载到.net服务器。 我只是使用c:/inetpub/wwwroot作为服务器位置

我的java代码是

 public class MainActivity extends Activity {
    InputStream inputStream;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.two);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();

        bitmap.compress(Bitmap.CompressFormat.PNG,90, stream);
        byte[] byte_arr = stream.toByteArray();
        String image_str = Base64.encodeBytes(byte_arr);
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("image",image_str));

        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://127.0.0.1/AndroidUpload/uploadImage.cs");
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response = httpClient.execute(httpPost);
            String the_response_string = convertResponseToString(response);


            Toast.makeText(this, "Response"+the_response_string, Toast.LENGTH_SHORT).show();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(this,"Error1", Toast.LENGTH_SHORT).show();
        } catch (ClientProtocolException e) {
             //TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(this,"Error2", Toast.LENGTH_SHORT).show();}
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(this,"Error3", Toast.LENGTH_SHORT).show();
        }

    }
    public String convertResponseToString(HttpResponse response)throws IllegalStateException,IOException {
        // TODO Auto-generated method stub

        String res = "";
        StringBuffer buffer = new StringBuffer();
        inputStream = response.getEntity().getContent();
        int contentLength = (int) response.getEntity().getContentLength();
        Toast.makeText(this, "ContentLength"+contentLength, Toast.LENGTH_SHORT).show();

        if(contentLength<0){
                    }
        else{
            byte[] data = new byte[512];
            int len = 0;

            try {
                while(-1 != (len=inputStream.read(data))){
                    buffer.append(new String(data,0,len));
                }

                inputStream.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            res = buffer.toString();

            Toast.makeText(this, "Result"+res, Toast.LENGTH_SHORT).show();
        }

        return res;
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}
运行时,它抛出IOException。并且该文件不会上载到该文件夹中。也尝试了php代码,结果相同。
问题出在哪里?

这是一个常见问题。事实上,您应该将asp.net web应用程序托管在iis web服务器中(在您的计算机上),并获取您的计算机ip地址(通过cmd中的ipconfig命令),然后将您的ip地址而不是
”http://127.0.0.1/AndroidUpload/...“
。它可能类似于
”http://192.168.1.2/AndroidUpload/...“

Android emulator无法理解127.0.0.1(本地地址)

编辑:

我不知道如何用asp.net web表单加载文件,但如果我是你,我会编写一个简单的asp.net mvc应用程序,并在控制器中声明如下操作:

[HttpPost]
        public ActionResult UploadItem()
        {
            var httpPostedFileBase = Request.Files[0];
            if (httpPostedFileBase != null && httpPostedFileBase.ContentLength != 0)
            {
                //save file in server and return a string 
        return Content("Ok");
            }
            else
            {
               return Content("Failed")
            }
    }

要从仿真器连接到PC web服务器,您需要遵循Android当前使用的。更具体地说,
10.0.2.2
是您想要使用的地址


还要确保您的
AndroidManifest.xml
包含Internet使用权限。干杯

请出示IOException(stacktrace)。07-12 11:59:08.594:W/System.err(491):org.apache.http.conn.HttpHostConnectException:连接到拒绝的W/System.err(491):在org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:178)W/System.err(491):在org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)W/System.err(491):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)W/System.err(491):在java.net.Socket.connect(Socket.java:1055)和更多。所有这些都是警告,没有显示错误。尝试了我的计算机ip地址,但引发了IO异常。它在使用ip 10.0.2.2时正常工作。但是该文件未到达目标文件夹。您可能希望保存到
string FilePath=Server.MapPath(“~/files/two.png”)-注意~。为了更好的解释,你可以看看这里:我需要传达我不处理iis或其他事情。我只有这些代码和c:/inetpub/wwwroot中的文件夹。在这个阶段我还有什么需要做的吗?
[HttpPost]
        public ActionResult UploadItem()
        {
            var httpPostedFileBase = Request.Files[0];
            if (httpPostedFileBase != null && httpPostedFileBase.ContentLength != 0)
            {
                //save file in server and return a string 
        return Content("Ok");
            }
            else
            {
               return Content("Failed")
            }
    }