7

playframework を使用して Web サイトを構築しています。また、 xheditorという名前のリッチ エディターも使用します。

Xheditor は ajax-fileuploading をサポートします。サーバー側には、アップロード ファイルを含む「filedata」パラメーターを受け入れるアクションが必要です。

だから私はアップロードアクションを書きました:

public class Application extends Controller {
    public static void upload(File filedata) { 
        // the filedata should not be null
        renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}"); 
    } 
}

IE6 では問題なく動作します。filedata は null ではなく、正しいデータが含まれています。しかし、クロムまたはファイアフォックスを使用すると、ファイルデータはnullです!!

firebug を使用して、firebug が送信するものを監視し、そのようなヘッダーを送信することを発見しました。

content-disposition
attachment; name="filedata"; filename="051111twdns.zip"

play がこのケースを正しく処理していないと思うので、パラメータ "filedata" は null です。

chrome と firefox で動作するように、そのアクションを変更しました。

public class Application extends Controller {
    public static void upload(File filedata) { 
        if(filedata!=null) {
            // ok, it's IE6
            renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}"); 
        } else {
            // it's chrome or firefox, the data is in request.body
            File targetFile = new File("upload/test.zip");
            IOUtils.copy(request.body, new FileOutputStream(targetFile));
        }
    } 
}

これは IE6、chrome、firefox で動作しますが、アップロード ファイルが非常に小さい場合のみです。たとえば、4K 未満。12K など少し大きい場合、メソッド「IOUtils.copy」は「読み取りエラー!」を報告します。次のコードでもそのようなエラーが報告されます。

request.body.available()
request.body.read()
request.body.read(bytes)
4

2 に答える 2

1

サイトをファイル アップローダと統合してみてください。さまざまな言語のドキュメントやサンプルがたくさんあります www.uploadify.com/

于 2010-12-29T18:42:08.693 に答える