通过 PHP [CodenameOne] 在服务器上上传文件

Upload file on server through PHP [CodenameOne]

我想上传 image 文件到服务器,因为没有找到任何方法直接从 CodenameOne 上传文件到服务器。我将图像转换为 Base64 格式并发送到 php 文件,然后在 php 中再次解码图像并尝试上传。但同样也不起作用。你能告诉我如何解决这个问题吗?

我的PHP代码:

<?php

define('UPLOAD_DIR', 'public_html/appFiles/GKQuiz/userProfilePicture/');
//$Imagecode=$_POST['Image'];


//Base64 String already added in $Imagecode
$Imagecode="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";

$img=base64_decode($Imagecode);
//echo $img;
$uid=uniqid();

$ftp_server = "example.com";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to ftp_server");
$login = ftp_login($ftp_conn, "example.com", "123");

if (ftp_put($ftp_conn, UPLOAD_DIR . $uid . ".jpg", $img, FTP_BINARY))
{
  echo "Successfully uploaded";
}
else{
  echo "Error uploading";
}

// close connection
ftp_close($ftp_conn);

?>

我想你需要使用 PHP: move_uploaded_file() 如您所见,here 是一个完整示例,希望对您有所帮助。

终于找到了与下面相同的答案。

更正 PHP 代码:

<?php

define('UPLOAD_DIR',$_SERVER['DOCUMENT_ROOT'].'/appFiles/GKQuiz/userProfilePicture/');

// after $_SERVER['DOCUMENT_ROOT']. your root inside public_html folder if any or '/'.

$Imagecode=$_POST['Image']; // parameter

$img=base64_decode($Imagecode);
$uid=uniqid();

$file = UPLOAD_DIR . $uid . '.jpg';
$success = file_put_contents($file, $img);

if ($success)
{
  echo $uid.'.jpg';
}
else
{
  echo "error";
}

?>

在 CodenameOne 中,您的代码可能如下所示:

if (profilepic!=null) {
ImageIO imgIO = ImageIO.getImageIO();
ByteArrayOutputStream out = new ByteArrayOutputStream();
imgIO.save(profilepic, out, ImageIO.FORMAT_JPEG, 1);
byte[] ba = out.toByteArray();
String Imagecode = Base64.encode(ba);
//System.out.println("data :"+Imagecode);
request = new ConnectionRequest(){
     @Override
     protected void handleErrorResponseCode(int code, String message) {
           System.out.println("Code :"+code+" Msg :"+message);
     }

};
request.setPost(true);
request.setHttpMethod("POST");
request.addArgument("Image", Imagecode);
request.setUrl("http://example.com/filename.php");
NetworkManager.getInstance().addToQueueAndWait(request);
}else{
     System.out.println("Unable to upload");
}

Codename One has a builtin standard upload API thru support for the multipart request HTTP standard in MultipartRequest.

MultipartRequest 无缝处理二进制 base64 等

MultipartRequest request = new MultipartRequest();
request.setUrl(url);
request.addData("myFileName", fullPathToFile, "text/plain")
NetworkManager.getInstance().addToQueue(request);

Java 拦截它的 servlet 代码应该是这样的:

@WebServlet(name = "UploadServlet", urlPatterns = {"/upload"})
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 100, // 10 MB
        maxFileSize = 1024 * 1024 * 150, // 50 MB
        maxRequestSize = 1024 * 1024 * 200)      // 100 MB
public class UploadServlet extends HttpServlet {

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        Collection<Part> parts = req.getParts();
        Part data = parts.iterator().next();
        try(InputStream is = data.getInputStream()) {}
            // store or do something with the input stream
        }
    }
}

我不是 PHP 人,但快速 google 搜索让我在 w3c school 上有了这个

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
?>