繁体   English   中英

使用PHP上传Java文件:不起作用

[英]Java file uploading using PHP : Not working

我正在尝试点击按钮上传图像文件。 我为iOS使用了相同的php脚本,它似乎工作正常。 我添加了用于上传文件的代码。 我怀疑是我没有正确传递图像文件路径。 实际上,我已经添加了保存图像文件的方法。 我只是将其另存为“ sign.jpeg”。 我没有看到按钮单击后的图像指向uploadfile(View view)方法。

  public void uploadFile(View view) { 
          try {
             upload("sign.jpeg");

    } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
  }

实现文件上传的方法

public void upload(String selectedPath) throws IOException {

    HttpURLConnection connection = null;
    DataOutputStream outputStream = null;
    DataInputStream inputStream = null;

    String pathToOurFile = selectedPath;
    String urlServer = "http://localhost:8888/uploadJava.php";
    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(
                pathToOurFile));

        URL url = new URL(urlServer);
        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\";name=\""
                        + "sign.jpeg" + "\"" + 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);

        /*int serverResponseCode = connection.getResponseCode();
        String serverResponseMessage = connection.getResponseMessage();*/
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                        connection.getInputStream()));
     String inputLine;

     while ((inputLine = in.readLine()) != null) 
        System.out.println(inputLine);


        fileInputStream.close();
        outputStream.flush();
        outputStream.close();
    } catch (Exception ex) {
    }
}

php脚本上传文件

<?php
$target_path = "./images/";
$target_path = $target_path . basename($_FILES['uploadedfile']['name']);

 error_log("Upload File >>" . $target_path . $_FILES['error'] . " \r\n", 3,
"Log.log");

 error_log("Upload File >>" . basename($_FILES['uploadedfile']['name']) . " \r\n",
3, "Log.log");

 if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
       echo "The file " . basename($_FILES['uploadedfile']['name']) .
      " has been uploaded";
 } else {
     echo "There was an error uploading the file, please try again!";
 }
 ?>

裁剪后保存从相机拍摄的照片

PictureCallback mPicture = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {



        InputStream is = new ByteArrayInputStream(data);
        Bitmap bmp = BitmapFactory.decodeStream(is);

        bmp = Bitmap.createBitmap(bmp, 50, 200, bmp.getWidth() - 200, bmp.getHeight()/2);

        saveImage("sign.jpeg", bmp, getApplicationContext());




        try {
            FileOutputStream fos;
            fos= openFileOutput(fileName,Context.MODE_PRIVATE);
            System.out.println(data);
            fos.write(data);
            fos.close();
        }  catch (Exception e) {
            e.printStackTrace();
        }*/
        finish();
        //releaseCamera();
    }

};

图像保存方法

 private void saveImage(String filename, Bitmap b, Context ctx){
    try {
        ObjectOutputStream oos;
        FileOutputStream out;// = new FileOutputStream(filename);
        out = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
        oos = new ObjectOutputStream(out);
        b.compress(Bitmap.CompressFormat.PNG, 100, oos);

        oos.close();
        oos.notifyAll();
        out.notifyAll();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

是的,Internet权限已添加到AndroidManifest.xml中,如下所示

<uses-permission android:name="android.permission.INTERNET"/>

知道上面的代码有什么问题吗?

首先这样做:

File ourFile = new File(pathToOurFile);
int ourFileLength = (int)ourFile.length();
bufferSize = Math.min(ourFileLength, maxBufferSize);

然后我必须承认几乎从未使用过available() 写入应为bytesRead

for (;;) (
    int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    if (bytesRead <= 0) {
        break;
    }
    outputStream.write(buffer, 0, bytesRead);
}

并且没有notifyAll (用于对象锁/线程)。

由于您是通过HTTP将文件发送到php的,因此您可以尝试以下方法:

        HttpClient client = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("yourdomain.com");
        ResponseHandler<String> responseHandler = new BasicResponseHandler();

        try {
            MultipartEntity entity = new MultipartEntity();
            entity.addPart("uploadedfile", new FileBody(new File ("absolute_path_to_file")));
            httpPost.setEntity(entity);
            String resp = client.execute(httpPost, responseHandler);
        } catch (IOException e) {
            Log.d("log", e.getMessage(), e);
        }

对于这种方法,您将在构建路径中需要httpmime和httpclient lib: http ://hc.apache.org/downloads.cgi

暂无
暂无

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

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