繁体   English   中英

将文件发送到Android中的PHP服务器

[英]Send File to PHP Server in Android

我尝试将文件发送到PHP服务器。

给定方法:

    if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
45          if (is_uploaded_file($_FILES['file']['tmp_name'])) {
                if (strlen($sWorkSpacePath) > 0) {
                    $uploadfile = $sWorkSpacePath . "/" . basename($_FILES['file']['name']);
                } else {
                    $uploadfile = $doc_root . "/temp/" .  basename($_FILES['file']['name']); 
                }

        }

我看一下这个线程:

从Android设备在php服务器中上传文件

但是服务器仍然没有收到文件

这是我的代码。 我认为错误是在设置RequestProperty时

@Override
    protected Boolean doInBackground(Void... params)
        if (cd.isConnectingToInternet()) {
            String sURL = "http://test.com/android.php?fx=1232&ids=" + sessionId + "&id_task=" + jobid;
            File file = new File(getFilesDir(), jobid + ".kx_task");
            try {
                HttpURLConnection conn = null;
                DataOutputStream dos = null;
                String lineEnd = "\r\n";
                String twoHyphens = "--";
                String boundary = "*****";
                int bytesRead, bytesAvailable, bufferSize;
                byte[] buffer;
                int maxBufferSize = 1 * 1024 * 1024;
                File sourceFile = new File(getFilesDir(), jobid + ".kx_task");

                if (sourceFile.isFile()) {
                    FileInputStream fileInputStream = new FileInputStream(sourceFile);
                    URL url = new URL(sURL);

                    //Starte HTTP Verbindung zur URL
                    conn = (HttpURLConnection) url.openConnection();
                    conn.setDoInput(true); //Erlaubt input
                    conn.setDoOutput(true); //Erlaubt output
                    conn.setUseCaches(false); //Keine Cache kopie
                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("Connection", "Keep-Alive");
                    conn.setRequestProperty("ENCTYPE",
                            "multipart/form-data");
                    conn.setRequestProperty("Content-Type",
                            "multipart/form-data;boundary=" + boundary);
                    conn.setRequestProperty("bill", file.getAbsolutePath());

                    dos = new DataOutputStream(conn.getOutputStream());
                    dos.writeBytes(twoHyphens + boundary + lineEnd);
                    dos.writeBytes("Content-Disposition: form-data; name =\"bill\";tmp_name=\""
                            + file.getAbsolutePath() + "\"" + lineEnd);
                    dos.writeBytes(lineEnd);

                    //Erstelle einen Buffer von maximaler Größe
                    bytesAvailable = fileInputStream.available();

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

                    //Lese Datei und schreibe sie in...
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

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

                    //sende multipart form daten die notwendig sind nach der datei
                    dos.writeBytes(lineEnd);
                    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                    int serverResponseCode = conn.getResponseCode();
                    String serverResponseMessage = conn.getResponseMessage();

                    Log.i("uploadFile", "HTTP Response is : "
                            + serverResponseMessage + ": " + serverResponseCode);

                    fileInputStream.close();
                    dos.flush();
                    dos.close();
                }

我认为您应该尝试一下:由于PHP Web服务期望文件而不是Stream

尝试这个 :

MultipartEntity multipartEntity = new MultipartEntity();
multipartEntity.addPart("multifile[]", new FileBody(new File(
                        path), "image/jpeg"));
Httppost.setEntity(multipartEntity);

我建议使用android最好的网络库之一okhttp

这是一个如何上传文件的示例:

RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
            .addFormDataPart("param-name", fileName, RequestBody.create(MediaType.parse(contentType), yourFile)
            .build();
com.squareup.okhttp.Request request = new com.squareup.okhttp.Request.Builder()
            .url(url)
            .post(requestBody)
            .build();
Response response = okhttpClient.newCall(request).execute();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM