【问题标题】:PHP - renaming a file before uploadingPHP - 在上传之前重命名文件
【发布时间】:2018-06-22 16:51:34
【问题描述】:

我正在尝试构建 a question I asked yesterday

我能够使用 ajax 方法将文件传递给 PHP。但我需要能够将文件名更改为预订号。由于某种原因,预订没有传递给 PHP 脚本。所以我尝试了以下方法:

$('#uploadBtn').on('click', function()
{
  var form_data = new FormData();
  form_data.append("file", document.getElementById('pdfFile').files[0]);
  var booking = $('#bookingNum').val();
  var partner = $('#partnerCode').val();

  $.post('process/fileUpload.php', {booking:booking, partner:partner}, function(data)
  {
    // Wasn't sure if I needed anything here
    console.log(data);
  });

  $.ajax({
    url: 'process/fileUpload.php',
    method:"POST",
    data: form_data,
    contentType: false,
    cache: false,
    processData: false,
    success: function(data){console.log(data);},
    error: function(jqHHR, textStatus, errorThrown){console.log('fail: ' + errorThrown);}     
  });
});

正如您将在上面注意到的,我必须使用 $.post 方法将预订和合作伙伴发送到 php 脚本。

然后我使用 $.ajax 将 form_data 发送到同一个脚本。

(根据我昨天提出的问题,我无法在一个动议中实现这一点。所以这是我第二次尝试完成这个。如果有办法在一个动议中发送所有信息,请参考我链接的问题上面。)

所以在 PHP 脚本中,我可以通过几个函数获得我需要的所有项目:

<?php
  // from the $.post method
  if(isset($_POST['booking']))
  {
    $booking = $_POST['booking'];
    $partner = $_POST['partner'];
    getInfo($booking);
  }
  // from the $.ajax method
  if($_FILES['file'])
  {
    $file = var_dump($_FILES['file']);
    getFile($file);
  }

  function getInfo($booking)
  {
    return $booking;
  }

  function getFile($file)
  {
    return $file;
  }
?>

我知道它不漂亮,但我可以得到预订(我现在不需要合作伙伴),我也可以得到文件信息。

我需要做的是将文件重命名为预订,然后最后将其上传到必要的目录。

我不确定是否必须组合这些功能,但我确实尝试过,但没有成功。

话虽如此,我可以在 PHP 脚本中获取预订和文件信息。现在我将如何将文件重命名为预订?

【问题讨论】:

  • 不要这样做 - 解决上一个问题的问题。通过发送两个请求来解决您的问题是完全错误的方式!
  • @Phillipp - 会的。我已经放弃了。
  • 请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,聊天材料和缩写 txtspk,恳求,你多久了被卡住、投票建议、元评论等。只需解释您的问题,并展示您尝试过的内容、预期的内容以及实际发生的情况。

标签: php jquery function file-upload file-rename


【解决方案1】:

正如您使用form_data.append() 将文件数据添加到表单数据一样。您是否没有想到也使用它来添加预订和合作伙伴值?

$('#uploadBtn').on('click', function()
{
    var form_data = new FormData();
    form_data.append("file", document.getElementById('pdfFile').files[0]);
    form_data.append('booking', $('#bookingNum').val());
    form_data.append('partner', $('#partnerCode').val());

    $.post('process/fileUpload.php', form_data, function(data)
        {
            console.log(data);
        });
});

【讨论】:

  • 在这种情况下我不能使用 $.post 方法,因为我收到“非法调用”错误。
  • 而当我使用 $.ajax 方法时,我只得到文件信息。
  • 那是因为当所有数据都在一篇文章中到达时,您需要重新调整您的 PHP 代码才能工作
  • 哦,你应该使用echo json_encode($something); 将数据返回给 AJAX 调用
  • 它看起来像 PHP 中的任何其他表单处理代码,那里有数百万个示例
【解决方案2】:

要修复您的 ajax 请求(尤其是非法调用),请使用以下 javascript 代码

$('#uploadBtn').on('click', function()
{
    var form_data = new FormData();
    form_data.append("file", document.getElementById('pdfFile').files[0]);
    form_data.append('booking', $('#bookingNum').val());
    form_data.append('partner', $('#partnerCode').val());

    $.ajax({
        type: "POST",
        url: 'process/fileUpload.php',
        data: form_data,
        processData: false,
        contentType: false,
        success: function(data) { console.log(data); }
    });
});

注意processData: falsecontentType: false的使用

【讨论】:

  • 我遇到的问题已经在 PHP 端解决了。我可以回显文件信息,但我无法获得预订。想法?
  • 来吧,现在。我不想让任何人做我的工作。我尝试的一切都失败了。如前所述,我可以在 PHP 端回显文件信息,但似乎无法回显预订。 “帮助吸血鬼”的特征如何?
  • @Philipp - 我刚刚用我尝试的修改后的 PHP 代码编辑了你的答案。
  • 看来,你没有 - 只是测试了它,上面的例子完美运行。我$_POST['booking'] 是空的,在您发送请求时它是空的..
猜你喜欢
  • 2012-07-08
  • 2012-05-04
  • 2018-12-22
  • 2016-09-21
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多