Android图片上传至DirectAdmin服务器失败问题排查(附代码)
Android图片上传至DirectAdmin主机成功但目录无文件问题
我开发了一款支持上传JPEG、PNG、JPG、GIF格式图片到服务器的Android应用,应用提示上传完成,但在DirectAdmin 1.657主机的对应目录中找不到上传的图片。
DirectAdmin主机上的PHP上传脚本
<?php $target_dir = "/domains/sample.com/public_html/user-images"; $target_file = $target_dir . basename($_FILES["file"]["name"]); if ($_FILES["file"]["error"] > 0) { echo "something when wrong when uploading the file: " . $_FILES["file"]["error"]; } else { if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) { echo "Ang file " . basename( $_FILES["file"]["name"]). " uploaded."; } else { echo "something went wrong when uploading the file"; } } ?>
Android应用中的Activity代码
public class DataseSorterForDebugOnlyPart2 extends AppCompatActivity { private static final String UPLODS_URL = "http://example.com/upload.php"; private EditText fileNameEditText; @SuppressLint("SetTextI18n") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.databasesortformat_2); fileNameEditText = findViewById(R.id.file_name); Button uploadButton = findViewById(R.id.upload_button); uploadButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String fileName = "Picsart_24-01-14_22-19-59-832"; if (!fileName.isEmpty()) { new UploadFileAsync().execute("/storage/emulated/0/Pictures/Picsart/Picsart_24-01-14_22-19-59-832.png"); } else { Toast.makeText(DataseSorterForDebugOnlyPart2.this, "Enter file name", Toast.LENGTH_SHORT).show(); } } }); } private class UploadFileAsync extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { String fileName = params[0]; String responseString = ""; try { URL url = new URL(BaseUrl.UPLOAD); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); String boundary = "*****"; String lineEnd = "\r\n"; connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); DataOutputStream dos = new DataOutputStream(connection.getOutputStream()); // File File file = new File(fileName); FileInputStream fis = new FileInputStream(file); dos.writeBytes("--" + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + fileName + "\"" + lineEnd); dos.writeBytes(lineEnd); int bytesAvailable = fis.available(); int bufferSize = Math.min(bytesAvailable, 1024); byte[] buffer = new byte[bufferSize]; int bytesRead = fis.read(buffer, 0, bufferSize); while (bytesRead > 0) { dos.write(buffer, 0, bufferSize); bytesAvailable = fis.available(); bufferSize = Math.min(bytesAvailable, 1024); bytesRead = fis.read(buffer, 0, bufferSize); } dos.writeBytes(lineEnd); dos.writeBytes("--" + boundary + "--" + lineEnd); int serverResponseCode = connection.getResponseCode(); String serverResponseMessage = connection.getResponseMessage(); Log.i("RERE", serverResponseMessage); if (serverResponseCode == HttpURLConnection.HTTP_OK) { responseString = "File Uploaded Successfully"; } else { responseString = "File Upload Failed"; } fis.close(); dos.flush(); dos.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return responseString; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); } } }
更新:我发现问题出在主机端,图片并没有完成上传。
内容的提问来源于stack exchange,提问作者unboundExDev
相关产品推荐
相关产品推荐

