我想使用Android Studio在服务器上传文件。我有代码,但没有工作。这很奇怪。我能怎么做?这是代码:
public void uploadFile(String sourceFileUri) {
HttpURLConnection mHttpURLConnection = null;
DataOutputStream mOutputStream = null;
String strLineEnd = "\r\n";
String strTwoHyphens = "--";
String strUpLoadServerUri = upLoadServerUri;
String strBoundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
File sourceFile = new File(sourceFileUri);
if (!sourceFile.isFile()) {
Log.e("uploadFile", "Source File not exist :" + sourceFile.getAbsolutePath());
runOnUiThread(new Runnable() {
public void run() {
//messageText.setText("Source File not exist :"+uploadFilePath + "" + uploadFileName);
}
});
}
else
{
try {
// open a URL connection to the Servlet
FileInputStream fileInputStream = new FileInputStream(sourceFile);
URL url = new URL(strUpLoadServerUri);
// Open a HTTP connection to the URL
mHttpURLConnection = (HttpURLConnection) url
.openConnection();
mHttpURLConnection.setDoInput(true); // Allow Inputs
mHttpURLConnection.setDoOutput(true); // Allow Outputs
mHttpURLConnection.setUseCaches(false); // Don't use a Cached Copy
mHttpURLConnection.setRequestMethod("POST");
mHttpURLConnection.setRequestProperty("Connection","Keep-Alive");
mHttpURLConnection.setRequestProperty("ENCTYPE","multipart/form-data");
mHttpURLConnection.setRequestProperty("Content-Type","multipart/form-data;boundary=" + strBoundary);
mHttpURLConnection.setRequestProperty("uploaded_file",sourceFileUri);
mOutputStream = new DataOutputStream(mHttpURLConnection.getOutputStream());
mOutputStream.writeBytes(strTwoHyphens + strBoundary + strLineEnd);
mOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename="+ sourceFileUri + strLineEnd);
mOutputStream.writeBytes(strLineEnd);
// create a buffer of maximum size
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
mOutputStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
// send multipart form data necesssary after file data...
mOutputStream.writeBytes(strLineEnd);
mOutputStream.writeBytes(strTwoHyphens + strBoundary + strTwoHyphens + strLineEnd);
// Responses from the server (code and message)
serverResponseCode = mHttpURLConnection.getResponseCode();
// close the streams //
fileInputStream.close();
mOutputStream.flush();
mOutputStream.close();
} catch (MalformedURLException ex) {
ex.printStackTrace();
Log.e("Upload file to server", "error: " + ex.getMessage(),ex);
} catch (Exception e) {
e.printStackTrace();
Log.e("Upload file to server Exception","Exception : " + e.getMessage(), e);
}
}
if (serverResponseCode == 200) {
Log.d("File Uploaded For ",sourceFileUri + " Successful");
runOnUiThread(new Runnable() {
public void run() {
/*
String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
+" http://www.androidexample.com/media/uploads/"
+uploadFileName;
//messageText.setText(msg);
*/
Toast.makeText(Page1.this, "File Upload Complete.",
Toast.LENGTH_SHORT).show();
}
});
}
else{
Log.d("File Uploaded For ",sourceFileUri + " Failed");
runOnUiThread(new Runnable() {
public void run() {
/*
String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
+" http://www.androidexample.com/media/uploads/"
+uploadFileName;
//messageText.setText(msg);
*/
Toast.makeText(Page1.this, "File Upload Failed.",
Toast.LENGTH_SHORT).show();
}
});
}
}
这是代码PHP。我有一个服务器用这个文件php:
<?php
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], './'.$_FILES['uploaded_file']['name'])) {
echo "Success";
} else{
echo "fail";
?>