【问题标题】:Send File to PHP Server in Android在 Android 中将文件发送到 PHP 服务器
【发布时间】:2015-08-06 17:24:02
【问题描述】:

我尝试将文件发送到 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']); 
                }

        }

我看过这个帖子:

Uploading file in php server from android device

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

这是我的代码。我认为错误是在设置 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 android web-services file-transfer


    【解决方案1】:

    我建议使用最好的 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();
    

    【讨论】:

    • 谢谢你!我试试看。也许这对我有用......你知道我必须在“param_name”中输入什么吗?
    • @korunos 您应该将其替换为您的网络服务所期望的文件名称,就像您为“boundry”所做的那样。我还建议您使用“邮递员”测试您的端点,以确保您的网络服务正常工作。
    【解决方案2】:

    我认为你应该试试这个: 作为 PHP webservice 需要一个文件而不是 Stream

    试试这个:

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

    【讨论】:

    • 因为它是一个.txt文件,我不需要将“image/jpeg”部分更改为其他内容吗?
    • 这是 mime 类型,您必须将 mime 类型更改为:text/plain 或 text/*
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多