1

PHPを使用してファイルをアップロードしようとしていますが、実際に動作している他のインスタンスからファイルをコピーして名前を変更しています(写真をアップロードしています)。しかし、何らかの理由で、フォームが画像ではないファイルを渡していない (POST) :-/ したがって、履歴書で、画像ファイルのこの (Google) 'リクエスト ペイロード' を取得しています:

------WebKitFormBoundaryrHOYostaC2KnUDlD
Content-Disposition: form-data; name="uploaded_file[]"; filename="image.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryrHOYostaC2KnUDlD--

しかし、これはtxtまたはpdfファイルの場合:

------WebKitFormBoundaryc1RJOtSOpYKAZiBz--

フォームとスクリプトは次のとおりです (関数は、ユーザーが [送信] をクリックするのを避けるためのもので、うまく機能します):

echo '
<script language="JavaScript" type="text/javascript">
function HandleBrowseClick()
{
    var fileinput = document.getElementById("uploaded_file");
    fileinput.click();
}
function Handlechange()
{
var fileinput = document.getElementById("uploaded_file");
var textinput = document.getElementById("filename");
textinput.value = fileinput.value;
}
</script>';

echo '    
<form enctype="multipart/form-data" target="_blank" name="send_file" id="send_file" method="post" action="file_upload.php">

<input type="file" class="hide button" id="uploaded_file" name="uploaded_file" onChange="Handlechange();"/>

<button type="submit" id="btn">Upload!</button>
</form>';

echo '
<div onclick="HandleBrowseClick();" id="fakeBrowse" >Load a file</div>
<input type="text" id="filename" size="50" readonly="true" />
   ';

したがって、何も渡していないfile_upload.phpため、「ERROR: Please browse for a file before clicking the upload button.」または「Invalid argument supplied for foreach()」(配列が必要な場合) エラーが発生します。同じ結果を許可して
みました。疑問符がないと怒る人のために: フォームが画像ではうまく機能するのに、他の種類のファイルではうまく機能しないのはなぜですか? 私は何を間違っていますか? これが最初の数行です(必要ではないと思いますが、わかりません):application/x-www-form-urlencoded

file_upload.php

$target = "../files/temp/"; 

foreach ($_FILES["uploaded_file"]["error"] as $key => $error) {
    if ($error != UPLOAD_ERR_OK) { echo "error"; die;}

$fileName = $target . $_FILES["uploaded_file"]["name"][$key];  // The file name
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"][$key];     // File in the PHP tmp folder
$fileType = $_FILES["uploaded_file"]["type"][$key];           // The type of file it is
$fileSize = $_FILES["uploaded_file"]["size"][$key];           // File size in bytes
$fileErrorMsg = $_FILES["uploaded_file"]["error"][$key];      // 0 for false... and 1 for true last $key!!!

$fileName = preg_replace('#[^a-z.0-9]#i', '', $fileName); // filter the $filename
$fileName = strtolower($fileName);
$kaboom = explode(".", $fileName);    // Split file name into an array using the dot
$fileExt = end($kaboom);              // Now target the last array element to get the file extension

if (!$fileTmpLoc) { // if file not chosen
    echo "ERROR: Please browse for a file before clicking the upload button.";
    exit();
    } 
else if ($fileErrorMsg == 1) { // if file upload error key is equal to 1
    echo "ERROR: An error occurred while processing the file. Try again.";
    exit();
}

最後に、さらに js を追加します。

    if (window.FormData) {
        formdata = new FormData();
        document.getElementById("btn").style.display = "none";

    }

    input.addEventListener("change", function (evt) {
        document.getElementById("response").innerHTML = "Loading . . ."

        var i = 0, len = this.files.length, img, reader, file;

        for ( ; i < len; i++ ) {    
            file = this.files[i];
            if (!!file.type.match(/image.*/)) {
                if (formdata) {
                    formdata.append("uploaded_file[]", file);
                }
            }   
        }

        if (formdata) {
            $.ajax({
                url: "file_upload.php",
                type: "POST",
                data:  formdata,
                processData: false,
                contentType: false
            }).done(function (res) {
                document.getElementById("response").innerHTML = res;
                if ( window.FileReader ) {
                    reader = new FileReader();
                    reader.onloadend = function (e) { 
                        showUploadedItem(e.target.result, file.fileName);
                    };
                    reader.readAsDataURL(file);
                }
                });
        }
    }, false);

contentType を変更しても違いはありません ありがとう!!!

4

2 に答える 2

0

ファイルの MIME タイプを定義する必要があります。例えば

.pdf    application/pdf
.doc    application/msword
于 2012-12-26T23:14:25.463 に答える
0

わかりました、悪いです。js ファイルには画像フィルターがあります。外すとすぐに動き始めました。

于 2012-12-27T07:02:40.770 に答える