1

ユーザーがブラウザで注釈を付けることができる画像があります。を使用して画像にアクセスできます

canvas.toDataURL() 

...ユーザーが画像をサーバーに保存するための「保存」オプションを追加したいと思います。

この質問はphpで回答されています...

file_put_contents('test.png', base64_decode(substr($data, strpos($data, ",")+1))); 

...必要なのは、PNG ファイルのコンテンツを含む Seaside コールバックです。

シーサイドでこれを行う方法はありますか?

Johan は、地雷タイプの宣言を値文字列から削除する必要があることを指摘しました。これはVWで機能します...(「data:image/png;base64」を削除するための文字列ハックを使用)

  
html jQuery ajax
  コールバック: [:値 |
    | | 書き込みストリーム文字列 |          
    writestream := ('c:\data\sketchpad_image.png' asFilename withEncoding: #binary) writeStream.
    文字列 := 値 copyFrom: 23 to: 値のサイズ。
    [writestream nextPutAll: (Seaside.GRPlatform 現在の base64Decode: 文字列) asByteArray]
      確認: [書き込みストリームを閉じる] ]
  値: (Javascript.JSStream on: 'sketchpadCanvas.toDataURL()')
4

2 に答える 2

1

Web サイトをどのように動作させたいかによって、複数の方法があると思います。これは、jQuery ajax コールバックを使用して考えられる 1 つの可能性の生のサンプルです。

html jQuery ajax 
     callback: [:value | (FileStream newFileNamed: 'test.png') 
                              nextPutAll: (value copyFrom: ((value indexOf: $,) + 1 to: value size) base64Decoded ] 
     value: (JSStream on: 'canvas.toDataURL()')

私はこれを自分でテストしませんでした。#binary正しいpngファイルを作成するには、ファイルストリームにメッセージを送信する必要があるかもしれません。不具合があればお知らせください。

それが役に立てば幸い。

于 2011-07-27T08:19:14.620 に答える
0

Seaside ブックのファイル アップロードセクションで問題は解決しましたか? 本からコードを取得する:

UploadForm>>renderContentOn: html
    html form multipart; with: [
        html fileUpload
            callback: [ :value | self receiveFile: value ].
        html submitButton: 'Send File' ]

UploadForm>>receiveFile: aFile
    | stream |
    stream := (FileDirectory default directoryNamed: 'uploads')
        assureExistence;
        forceNewFileNamed: aFile fileName.
    [ stream binary; nextPutAll: aFile rawContents ] 
        ensure: [ stream close ]

また、Seaside と Nginx を使用して実稼働環境でファイルのアップロードを管理する方法についてのブログ投稿も公開しました。

于 2011-07-27T08:36:05.080 に答える