0

わかりました、この JavaScript コードがあります。FileReader オブジェクトを使用してファイルをアップロードします。しかし、バイトに + 文字を含む MID ファイルをアップロードしようとすると、常にそれがスペースに変更されます! FileReader が MID ファイルを読み取った直後にクライアント側でデータをチェックアウトし、アップロードされた最終結果と同じだったため、エラーがサーバー側スクリプトにないことはわかっています。ファイルをテキストとして読み込もうとしましたが、それも機能しません。コードのコメントは無視してください。以前のコードを消去せずに、別のバージョンのコードを試すためにコメントを入れました。エラーがアップロード機能のどこかにあると確信しています。

注: 何らかの理由で、StackOverflow がコードを正しく表示できません。完全な HTML コードを取得するには、次の URL にアクセスしてください: http://uploadfilez.tommy3244.com/cgi-bin/index.cgi

数時間試してみましたが、一部の文字 (+、他にもあるかもしれません) がスペースになってしまいます。何が問題なのかわからない!元のファイルと最終結果の MID ファイルをアップロードする必要がある場合は、教えてください。ありがとう!

4

1 に答える 1

1

escapeソースをざっと見てみると、使いたくないときに JavaScript 関数を使用していることがわかります。

ソース コードの 80 ~ 90 行目を見てから、次のドキュメントを参照してescapeください。問題は明らかです。

http://www.w3schools.com/jsref/jsref_escape.asp

編集:1/2/13

私はこれをもう少し調べましたが、上記の私の答えは問題ではないと思います. ブレークポイントを使用して、アップロード関数に渡される引数が正しいことを確認できました (つまり、「+」文字を含むファイル名で試しました)。

u/p がないため、アップロード関数内でブレークポイントを使用してテストできませんでした。ただし、アップロード機能でエラーが見つかると思います。具体的には、ここで行っているように、クエリ文字列を手動で作成しようとするのをやめます。

    var data = "";
    //data.append("filename", document.getElementById("filename0").value);
    data += "filename="+escape(document.getElementById("filename0").value);
    //data.append("username", document.getElementById("username").value);
    data += "&username="+escape(document.getElementById("username").value);
    //data.append("password", document.getElementById("password").value);
    data += "&password="+escape(document.getElementById("password").value);
    //data.append("public", document.getElementById("public").value);
    data += "&public="+escape(document.getElementById("public").value);
    //data.append("filebytes", escape(e.target.result));
    data += "&filebytes="+escape(e.target.result);
    //stdlog("Got result! Res: '''"+e.target.result+"'''");

代わりに、次のように JSON を使用してデータを構築します。

var data = {};
data.filename = escape(document.getElementById("filename0").value);//fixed coding error
// and so on for the other properties

それを試して、問題が解決するかどうかをお知らせください。

于 2012-12-31T03:00:44.380 に答える