将图像上传到服务器-Android [英] Uploading Image to Server - Android

查看:75
本文介绍了将图像上传到服务器-Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有Rest Api的链接和用于在C Sharp中上载图像的示例代码,但是如何使用Java从Android上载图像到服务器同样是

I have got the Rest Api's link and the sample code for uploading the image in C sharp but how to upload image to server from android the same thing using java

这是示例代码

http://xx.xx.xxx.xx/restservice/photos

Sample code for uploading file:
 string requestUrl = string.Format("{0}/UploadPhoto/{1}", url,filnm);
//file name should be uniqque
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUrl);
                request.Method = "POST";
                request.ContentType = "text/plain";
                byte[] fileToSend = FileUpload1.FileBytes; //File bytes
                request.ContentLength = fileToSend.Length;

                using (Stream requestStream = request.GetRequestStream())
                {
                    // Send the file as body request.
                    requestStream.Write(fileToSend, 0, fileToSend.Length);
                    requestStream.Close();
                }

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    Console.WriteLine("HTTP/{0} {1} {2}", response.ProtocolVersion, (int)response.StatusCode, response.StatusDescription);

您将如何使用android

how you will you do it with the android

已编辑

借助您的回答,我已经在此处编写了代码,但是我得到了404连接响应和ERROR ERROR

With the help of your answer I have written the code over here but I am getting 404 connection response and the ERROR ERROR

    public class ImageUploadToServer extends Activity {

    TextView messageText;
    Button uploadButton;

    String upLoadServerUri = null;
    String urlLink = "http://xx.xx.xxx.xx/restservice/photos/";
    String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/myimg.jpg";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload_to_server);

        uploadButton = (Button)findViewById(R.id.uploadButton);
        messageText  = (TextView)findViewById(R.id.messageText);
        uploadData();

    }

    public void uploadData ()
    {

        HttpURLConnection connection = null;
        DataOutputStream outputStream = null;  
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024; 

        try {
            // FileInputStream fileInputStream = new FileInputStream(new File(path));

             File sourceFile = new File(path); 

             FileInputStream fileInputStream = new FileInputStream(sourceFile);

             URL url = new URL(urlLink);
             connection = (HttpURLConnection) url.openConnection();

             Log.d("Connection:", "Connection" + connection.getResponseCode());

             connection.setDoInput(true);
             connection.setDoOutput(true);
             connection.setUseCaches(false);

             connection.setRequestMethod("POST");

             connection.setRequestProperty("Connection", "Keep-Alive");
             connection.setRequestProperty("Content-Type",
                     "multipart/form-data;boundary=" + boundary);

             outputStream = new DataOutputStream(connection.getOutputStream());
             outputStream.writeBytes(twoHyphens + boundary + lineEnd);
             outputStream
                     .writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""
                             + path + "\"" + lineEnd);
             outputStream.writeBytes(lineEnd);

             bytesAvailable = fileInputStream.available();
             bufferSize = Math.min(bytesAvailable, maxBufferSize);
             buffer = new byte[bufferSize];

             bytesRead = fileInputStream.read(buffer, 0, bufferSize);

             while (bytesRead > 0) {
                 outputStream.write(buffer, 0, bufferSize);
                 bytesAvailable = fileInputStream.available();
                 bufferSize = Math.min(bytesAvailable, maxBufferSize);
                 bytesRead = fileInputStream.read(buffer, 0, bufferSize);
             }

             outputStream.writeBytes(lineEnd);
             outputStream.writeBytes(twoHyphens + boundary + twoHyphens
                     + lineEnd);

             fileInputStream.close();
             outputStream.flush();
             outputStream.close();

             InputStream responseStream = new BufferedInputStream(connection.getInputStream());

             BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(responseStream));
             String line = "";
             StringBuilder stringBuilder = new StringBuilder();
             while ((line = responseStreamReader.readLine()) != null) {
                 stringBuilder.append(line).append("\n");
             }
             responseStreamReader.close();

             String response = stringBuilder.toString();
             Log.w("SERVER RESPONE: ", "Server Respone" + response);

             responseStream.close();
             connection.disconnect();

         } catch (Exception ex) {
             Log.i("UPLOAD ERROR", "ERROR ERROR");
         }

    }


}

推荐答案

我目前正在使用此代码将小型视频上传到服务器(PHP服务器端).

I am currently using this code to upload small videos to server (PHP server side).

请不要认为不再支持apache HttpClient,所以要使用HttpURLConnection.

Take not that the apache HttpClient is not supported anymore, so HttpURLConnection is the way to go.

    try {
        FileInputStream fileInputStream = new FileInputStream(new File(
                path));

        URL url = new URL(urlLink);
        connection = (HttpURLConnection) url.openConnection();

        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);

        connection.setRequestMethod("POST");

        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type",
                "multipart/form-data;boundary=" + boundary);

        outputStream = new DataOutputStream(connection.getOutputStream());
        outputStream.writeBytes(twoHyphens + boundary + lineEnd);
        outputStream
                .writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""
                        + path + "\"" + lineEnd);
        outputStream.writeBytes(lineEnd);

        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];

        bytesRead = fileInputStream.read(buffer, 0, bufferSize);

        while (bytesRead > 0) {
            outputStream.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }

        outputStream.writeBytes(lineEnd);
        outputStream.writeBytes(twoHyphens + boundary + twoHyphens
                + lineEnd);

        fileInputStream.close();
        outputStream.flush();
        outputStream.close();

        InputStream responseStream = new BufferedInputStream(connection.getInputStream());

        BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(responseStream));
        String line = "";
        StringBuilder stringBuilder = new StringBuilder();
        while ((line = responseStreamReader.readLine()) != null) {
            stringBuilder.append(line).append("\n");
        }
        responseStreamReader.close();

        String response = stringBuilder.toString();
        Log.w("SERVER RESPONE: ", response);

        responseStream.close();
        connection.disconnect();

    } catch (Exception ex) {
        Log.i("UPLOAD ERROR", "ERROR ERROR");
    }
}

这篇关于将图像上传到服务器-Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆