PHP发送文件到JAVA项目

Posted 穆晟铭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP发送文件到JAVA项目相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/u012685554/article/details/126995307

亲测有用。

php代码

$file = $_FILES[\'order_upload\'][\'tmp_name\'];
//            // var_dump($file);exit();
//            // 判断文件是否存在
            if (!file_exists($file)) 
                $this->show(\'文件不存在!\');
                exit;
            
            $params = [
                \'file\'=>new \\CURLFILE($file),
                \'id\'=>\'1\',
                \'fileName\'=>$_FILES[\'order_upload\'][\'name\'],
            ];

            $url = "http://localhost:8080/upload";


            $header = array(\'Content-Type: multipart/form-data\');

            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");//3.请求方式
            curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($curl,CURLOPT_HEADER,$header);
            $response = curl_exec($curl);

            echo $response;

  

 

java代码

@RestController
@Slf4j
public class TestController 

    @PostMapping("/upload")
    @ResponseBody
    public String uploadOrderExcel(@RequestParam("file") MultipartFile file,@RequestParam("id")String id,@RequestParam("fileName")String fileName) 
        System.out.println("fileName:" + file.getOriginalFilename());
        System.out.println("id:" + id);
        System.out.println("fileName:" + fileName);
        String lastName = Objects.requireNonNull(fileName.substring(fileName.lastIndexOf(".") + 1));
        switch (lastName) 
            case "xlsx":
                try 
                    //xlsx
                    InputStream inputStream = file.getInputStream();
                    XSSFWorkbook wb = new XSSFWorkbook(inputStream);
                    XSSFSheet sheet = wb.getSheetAt(0);
                    //获取总行数 index从0开始
                    int rowNum = sheet.getLastRowNum();
                    //获取总列数,index好像从1开始
                    int colNum = sheet.getRow(0).getPhysicalNumberOfCells();
                    List<String> colNames = new ArrayList<>();
                    //插入列名
                    XSSFRow row = sheet.getRow(0);
                    for (int i = 0; i < colNum; i++) 
                        colNames.add(String.valueOf(row.getCell(i)));
                    
                    Map<String, Integer> map = checkDataFromFile(colNames);
                    for (Map.Entry<String, Integer> entry : map.entrySet()) 
                        System.out.print(entry.getKey() + "      ");
                    
                    System.out.println();
                    for (int i = 1; i <= rowNum; i++) 
                        for (Map.Entry<String, Integer> entry : map.entrySet()) 
                            XSSFRow nowRow = sheet.getRow(i);
                            System.out.print(nowRow.getCell(entry.getValue()) + "   ");
                        
                        System.out.println();
                    
                    return "rowNum: " + rowNum + " colNum: " + colNum;
                 catch (Exception e) 
                    throw new RuntimeException(e);
                
            case "xls":
                //xls
                try 
                    InputStream inputStream = file.getInputStream();
                    // 创建workbook对象,读取整个文档
                    HSSFWorkbook wb = new HSSFWorkbook(inputStream);
                    HSSFSheet sheet = wb.getSheetAt(0);
                    //获取行数,列数
                    int rowNum = sheet.getLastRowNum();
                    int colNum = sheet.getRow(0).getPhysicalNumberOfCells();
                    List<String> colNames = new ArrayList<>();
                    //插入列名
                    HSSFRow row = sheet.getRow(0);
                    for (int i = 0; i < colNum; i++) 
                        colNames.add(String.valueOf(row.getCell(i)));
                    
                    Map<String, Integer> map = checkDataFromFile(colNames);
                    for (Map.Entry<String, Integer> entry : map.entrySet()) 
                        System.out.print(entry.getKey() + "      ");
                    
                    System.out.println();
                    for (int i = 1; i <= rowNum; i++) 
                        for (Map.Entry<String, Integer> entry : map.entrySet()) 
                            HSSFRow nowRow = sheet.getRow(i);
                            System.out.print(nowRow.getCell(entry.getValue()) + "   ");
                        
                        System.out.println();
                    
                    return "rowNum: " + rowNum + " colNum: " + colNum;
                 catch (Exception e) 
                    throw new RuntimeException(e);
                
            case "csv":
                return "csv";
            default:
                return "null";
        
    

    public Map<String,Integer> checkDataFromFile(List<String> colName) 
        //检查所需字段是否均存在表格内,存在返回Map<字段名,列索引>,不存在返回null
        //这里可以抽离出去封装
        Map<String, List<String>> oMap = new HashMap<>(16);
        List<String> list1 = new ArrayList<>();
        list1.add("收货人姓名");
        list1.add("收件人");
        oMap.put("name", list1);

        List<String> list2 = new ArrayList<>();
        list2.add("收货人地址");
        list2.add("收货地址");
        list2.add("地址");
        oMap.put("address", list2);

        List<String> list3 = new ArrayList<>();
        list3.add("收货人姓名电话");
        list3.add("联系方式");
        list3.add("手机");
        oMap.put("phone", list3);

        List<String> list4 = new ArrayList<>();
        list4.add("商品标题");
        list4.add("商品名称");
        list4.add("型号");
        oMap.put("goodsName", list4);

        List<String> list5 = new ArrayList<>();
        list5.add("数量");
        list5.add("商品数量");
        oMap.put("goodsNum", list5);

        boolean can = true;
        Map<String, Integer> resultMap = new HashMap<>(16);
        for (Map.Entry<String, List<String>> entry : oMap.entrySet()) 
            boolean found = false;
            for (String o : entry.getValue()) 
                for (int i = 0; i < colName.size(); i++) 
                    if (colName.get(i).equals(o)) 
                        resultMap.put(String.valueOf(entry.getKey()), i);
                        found = true;
                        break;
                    
                
            
            //如果有哪个字段没有匹配上
            if (!found) 
                can = false;
                break;
            
        
        //如果全部匹配
        if (can) 
            return resultMap;
        
        //默认返回
        return null;
    

  

 

PHP 变量到 Java 小程序?

【中文标题】PHP 变量到 Java 小程序?【英文标题】:PHP variables to Java applet? 【发布时间】:2012-05-20 17:44:11 【问题描述】:

我有一个音频可视化小程序,我使用 fft 进行处理和最小化来分析音频。现在我想在用户点击歌曲时使用 php 动态地将歌曲输入到程序中。我已经阅读了有关 JavaBridge 的信息,并使用 Tomcat 启动并运行它。我是否需要将歌曲变量值存储在 xml 文件中并将其发送到 .java 文件?这是正确的方法吗?如果是这样,知道这会是什么样子吗?我对java和处理完全陌生。任何帮助都将不胜感激!

【问题讨论】:

如果我可以在开发需要在网页中运行的 Java 小程序时为您提供提示,因为它们与 javascript 交互,请打开计算机上的“Java 控制面板”,然后高级 > 控制台>显示安慰。现在,当您访问具有小程序的网页时,浏览器中会弹出一个 java 控制台。有助于调试和查看消息/异常。此外,您可能需要经常按“x”命令。 【参考方案1】:

当用户点击歌曲时,使用 php 动态地将歌曲输入到程序中。

假定答案的翻译:

PHP 转 HTML。 “点击歌曲”到“点击链接”。

由于 HTML 中有歌曲链接,添加一个onclick() 处理程序,并在被调用的函数中,使用 JavaScript 调用小程序方法来加载所需的歌曲。

只要小程序从代码库或文档库加载歌曲,这在沙盒小程序中应该是允许的。不幸的是,从 JS 调用的方法中这样做会使事情稍微复杂化,因为安全沙盒更加严格。

如果是这种情况,则需要将调用包装在 PrivilegedAction 中并使用 AccessController.doPrivileged(PrivilegedAction) 调用它

【讨论】:

如果你有 javascript 调用的方法只是将动作排入队列,并且预先创建的单独线程通过轮询队列来执行网络操作,那是否不需要使用 PriveledgedAction 进行包装? 是的,谢谢,应该可以完美运行!如果流来自像 Soundcloud 这样的外部来源怎么办?大多数 Soundcloud 歌曲都有一个链接到 128kbs mp3 流的 stream_url 属性。会有整合的可能吗? 小程序需要信任(不是沙盒),除非您可以在您的站点安排代理 - 以重定向源。 我实际上意识到我可以将歌曲 url 作为参数发送到处理小程序,这样当用户单击歌曲时,它会调用一个 javascript 函数,该函数对 php 进行 ajax 调用我通过歌曲 url/id 的脚本。然后我将 url 插入到 applet 参数中,并在 applet 中使用 String url = this.getParameter("streamurl"); 读取它。 ,而且效果很好。感谢您的所有帮助! 另外顺便说一句,与 128kbps Soundcloud 流 url 的集成效果很好。 Minim 接受 url 或 mp3 文件作为源,因此 Soundcloud 的 api 提供的“stream_url”与 Minim 配合得很好!【参考方案2】:

基本顺序如下:

用户在浏览器中请求.php页面。 Web 服务器让 PHP 编写页面。 它可以编写带有指定applet的HTML,可以编写带有PHP填充值的参数的applet HTML。 客户端收到一个 HTML 页面,该页面将启动小程序。

因此,PHP 无法以简单直接的方式处理对页面的点击。在此关注@AndrewThompson。

【讨论】:

以上是关于PHP发送文件到JAVA项目的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HighCharts 图像保存到 PHP 中的项目文件夹中?

PHP 变量到 Java 小程序?

PHP登录系统不发送?

div 项目的 php onclick 将帖子发送到 url

使用 PHP 获取 SQL 数据,然后将数组发送到 Javascript

从 .php 发送/获取变量到 .php