File upload from soap client
Hallo ik probeer een file te uploaden naar een soap client, de file komt goed aan op de server maar als ik de file probeer te openen lukt dit niet. Wat doe ik fout of wat doe ik niet?
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.
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.
Kijk ik zie wel een stukje code, maar eigenlijk weet ik niet zo goed wat er mee moet gebeuren.
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?
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?
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 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.
Waarvoor doe je die base64_encode? Is die per se nodig? Doe je die toevallig twee keer?
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.
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.
Bart,
Ik heb een mooi script gevonden die je bestand encode, en vervolgens kan tonen in de browser. Misschien kan je er iets meer mee?
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!




