File upload from soap client
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
$fh = fopen('test/149120_469476713644_717498644_5950953_2388345_n.jpg', 'rb');
$fh2 = fopen('test/149120_469476713644_717498644_5950953_2388345_n.temp', 'wb');
$cache = '';
$eof = false;
while (1) {
if (!$eof) {
if (!feof($fh)) {
$row = fgets($fh, 4096);
} else {
$row = '';
$eof = true;
}
}
if ($cache !== '')
$row = $cache.$row;
elseif ($eof)
break;
$b64 = base64_encode($row);
$put = '';
if (strlen($b64) < 76) {
if ($eof) {
$put = $b64."\n";
$cache = '';
} else {
$cache = $row;
}
} elseif (strlen($b64) > 76) {
do {
$put .= substr($b64, 0, 76)."\n";
$b64 = substr($b64, 76);
} while (strlen($b64) > 76);
$cache = base64_decode($b64);
} else {
if (!$eof && $b64{75} == '=') {
$cache = $row;
} else {
$put = $b64."\n";
$cache = '';
}
}
if ($put !== '') {
echo $put;
fputs($fh2, $put);
fputs($fh2, base64_decode($put)); // for comparing
}
}
fclose($fh2);
fclose($fh);
// Upload file to domino
$client->dbUploadFile($srv_name, $db_name, $unid, 'Book_cover', $file, true, fseek($fh, 0));
$fh2 = fopen('test/149120_469476713644_717498644_5950953_2388345_n.temp', 'wb');
$cache = '';
$eof = false;
while (1) {
if (!$eof) {
if (!feof($fh)) {
$row = fgets($fh, 4096);
} else {
$row = '';
$eof = true;
}
}
if ($cache !== '')
$row = $cache.$row;
elseif ($eof)
break;
$b64 = base64_encode($row);
$put = '';
if (strlen($b64) < 76) {
if ($eof) {
$put = $b64."\n";
$cache = '';
} else {
$cache = $row;
}
} elseif (strlen($b64) > 76) {
do {
$put .= substr($b64, 0, 76)."\n";
$b64 = substr($b64, 76);
} while (strlen($b64) > 76);
$cache = base64_decode($b64);
} else {
if (!$eof && $b64{75} == '=') {
$cache = $row;
} else {
$put = $b64."\n";
$cache = '';
}
}
if ($put !== '') {
echo $put;
fputs($fh2, $put);
fputs($fh2, base64_decode($put)); // for comparing
}
}
fclose($fh2);
fclose($fh);
// Upload file to domino
$client->dbUploadFile($srv_name, $db_name, $unid, 'Book_cover', $file, true, fseek($fh, 0));
Ik ben een programmeur die aan de client kant werkt en php is nieuw voor mij dus het kan zijn dat ik iets anders denk, dus meer aan de client kant.
Het werkt niet, wat gaat er dan mis?
Kan je misschien wat commentaar erbij zetten?
Zo te zien moet het in stukken waar een base64 overheen is gegooid geüpload worden?
http://domino.flexdomino.net/flex/flexdemo.nsf/7C116892B94F45BAC12576570000E760/3ED0ADDA6E8D9EC0C12577800069B069?OpenDocument zie je dat er 1 afbeelding wel werkt deze heb ik geupload met een soap client in flex/flash/action script daar ging alles goed, alle andere afbeeldingen zijn geupload via de php soap client, komen allemaal aan op de server kan ze ook zien maar kan ze niet openen erg vreemd. Ik denk dat er iets mis gaat tijden het decoden maar het kan ook zijn dat het ergens anders mis gaat in de file pointer.
De file test/149120_469476713644_717498644_5950953_2388345_n.jpg staat momenteel op mijn server, deze file word gecodeerd naar base64 en weer gedecodeerd, vervolgens komt hij aan op de webservice, zoals je op de volgende link kunt zien Als je zo'n bestand wat niet goed overkomt de data ervan in een base64_decode (klik) gooit, dan komt de data voor het plaatje er gewoon uit.
Die encode heb ik nodig maar per se? Nee dat denk ik niet ik zal het eens zonder proberen. Klopt inderdaad dan komt het plaatje wel gewoon maar op de server word het ook gedecoded en gebeurd er gewoon helemaal niks.
Ik heb een mooi script gevonden die je bestand encode, en vervolgens kan tonen in de browser. Misschien kan je er iets meer mee?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
// Functie om een afbeelding om te zetten
// Geeft de base64 string terug van de omgezette image
function encode_img($img)
{
$fd = fopen($img, 'rb');
$size = filesize($img);
$cont = fread($fd, $size);
fclose($fd);
$encimg = base64_encode($cont);
return $encimg;
}
// Functie om de afbeelding weer te geven
function display_img($imgcode,$type)
{
header('Content-type: image/'.$type);
header('Content-length: '.strlen($imgcode));
echo base64_decode($imgcode);
}
// Geef het bestand op waar de afbeelding staat
$img = '../base64/test.gif';
// encode de afbeelding
$encoded_img = encode_img($img);
// Laat de afbeelding direct zien.
display_img(encode_img($img),'gif');
?>
// Functie om een afbeelding om te zetten
// Geeft de base64 string terug van de omgezette image
function encode_img($img)
{
$fd = fopen($img, 'rb');
$size = filesize($img);
$cont = fread($fd, $size);
fclose($fd);
$encimg = base64_encode($cont);
return $encimg;
}
// Functie om de afbeelding weer te geven
function display_img($imgcode,$type)
{
header('Content-type: image/'.$type);
header('Content-length: '.strlen($imgcode));
echo base64_decode($imgcode);
}
// Geef het bestand op waar de afbeelding staat
$img = '../base64/test.gif';
// encode de afbeelding
$encoded_img = encode_img($img);
// Laat de afbeelding direct zien.
display_img(encode_img($img),'gif');
?>
Gewijzigd op 13/04/2011 11:04:15 door Jack Sierkstra
Top werkt!