13 messaggi dal 27 settembre 2006
Salve io sto utilizzando delle api di viddler per gestire i video.
Per usare l'api utilizzo la classe httpwebrequest e httpwebresponse.
Finché devo postare dei dati in get tutto funziona però se voglio fare l'upload dal mio sito devo postare delle variabili e il file da un modulo di upload in post e il content-type che devo usare è il multipart/form-data.
Non riesco proprio a capire come posso fare qualcuno può aiutarmi facendomi vedere come posso fare sopratutto l'upload del file e poi postandolo con la classe httwebrequest in un altro sito e con il content-type multipart/form-data?

Vi ringrazio... spero di riuscire a risolvere il problema...
grazie a tutti...

PS. spero riusciate a farmi un esempio funzionante in VB però anche se qualcuno riesce a risolvermi il problema in C# ceecherò poi di convertirlo...

grazie a tutti per l'aiuto...
Zivi_SGC wrote:
Finché devo postare dei dati in get tutto funziona però se voglio fare l'upload dal mio sito devo postare delle variabili e il file da un modulo di upload in post e il content-type che devo usare è il multipart/form-data.

http://www.aspitalia.com/script/584/Effettuare-Richiesta-Metodo-POST-Pagina-ASP.NET.aspx
se i dati sono binari, come pare di intuire nel tuo caso, il metodo da usare è UploadData, che accetta come ultimo parametro un array di byte anzichè una stringa rispetto all'esempio di cui sopra.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
13 messaggi dal 27 settembre 2006
io uso questo codice però come risposta il server mi dice "Stream ended unexpectedly"

Dim objEncoding As New System.Text.UTF8Encoding
Dim objStreamWriter As System.IO.StreamWriter
Dim objStream As System.IO.Stream
Dim objHTTPRequest As HttpWebRequest
Dim sbPostData As New System.Text.StringBuilder
Dim objStreamReader As System.IO.Stream
Dim strResult As String

dim sessionidViddler as string = "IDSESSIONE"

objHTTPRequest = System.Net.WebRequest.Create("http://api.viddler.com/rest/v1/")
objHTTPRequest.Method = "POST"
objHTTPRequest.ContentType = "multipart/form-data; boundary=7cf2a327f01ae"

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""api_key""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append(apikey + vbCrLf)

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""method""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append("viddler.videos.upload" + vbCrLf) 'defaulted to 1000 but you can change this
sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""sessionid""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append(sessionidViddler + vbCrLf)

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""title""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append("TITOLO" + vbCrLf)

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""tags""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append("tag file ciao" + vbCrLf)

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""description""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append("descrizione del video" + vbCrLf)

sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""make_public""" + vbCrLf)
sbPostData.Append(vbCrLf)
sbPostData.Append("0" + vbCrLf)

'this is the header for our captcha file upload
sbPostData.Append("--" + "7cf2a327f01ae" + vbCrLf)
sbPostData.Append("Content-Disposition: form-data; name=""file""; filename=""" & fileform.postedFile.Filename & "" + vbCrLf)
sbPostData.Append("Content-Type: " & fileform.postedFile.ContentType & """ + vbCrLf)
sbPostData.Append(vbCrLf)


Dim bytPhotoContents As Byte() = fileForm.FileBytes

Dim bytPostContents As Byte() = objEncoding.GetBytes(sbPostData.ToString)


Dim bytPostFooter As Byte() = objEncoding.GetBytes(vbCrLf + "--" + "7cf2a327f01ae" + vbCrLf)

Dim bytDataBuffer As Byte() = New Byte(bytPostContents.Length + bytPhotoContents.Length + bytPostFooter.Length) {}

System.Buffer.BlockCopy(bytPostContents, 0, bytDataBuffer, 0, bytPostContents.Length)
'ystem.Buffer.BlockCopy(bytPhotoContents, 0, bytDataBuffer, bytPostContents.Length, bytPhotoContents.Length)
System.Buffer.BlockCopy(bytPostFooter, 0, bytDataBuffer, bytPostContents.Length + bytPhotoContents.Length, bytPostFooter.Length)

objHTTPRequest.ContentLength = bytDataBuffer.Length


objStream = objHTTPRequest.GetRequestStream()

objStream.Write(bytDataBuffer, 0, bytDataBuffer.Length)

'close our stream
objStream.Close()




Dim objHTTPResponse As HttpWebResponse = CType(objHTTPRequest.GetResponse(), HttpWebResponse)
objStreamReader = objHTTPResponse.GetResponseStream()
'final result from server is returned to strResult
Dim objStreamResult As New System.IO.StreamReader(objStreamReader)
strResult = objStreamResult.ReadToEnd
'close our objects
objStreamReader.Close()
objStreamResult.Close()


qualcuno sa dirmi se c'è qualcosa di sbagliato???? o qualche suggerimento alternativo?

grazie 1000
Zivi_SGC wrote:
io uso questo codice però come risposta il server mi dice "Stream ended unexpectedly"

perchè tu costruisci a mano la richiesta e non sono mica certo che sia formalmente corretta.
è possibilissimo inviare tutto usando UploadData, con meno complicazioni. alla fine devi inviare le header ed i field formattati correttamente, vedi: http://msdn.microsoft.com/en-us/library/ktfa4fek.aspx

in alternativa, questo codice pare uguale al tuo, ma è generico e dal feedback pare andare:
http://groups.google.it/group/microsoft.public.dotnet.languages.csharp/msg/20efa00bdaee29fc

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
13 messaggi dal 27 settembre 2006
ok adesso ho cambiato e faccio così:

'carico il valore di sessione da un campo di testo
dim sessionidviddler as string = testo.text

'link dove postare i dati
Dim uriString As String = linkviddler

Dim myWebClient As New WebClient()

'dati da postare
Dim postData As String = "method=viddler.videos.upload&api_key=" & apikey & "&sessionid=" & sessionidviddler &"&title=titolo&tags=tag&description=descrizione&make_public=0&file="

Dim postArray As Byte() = Encoding.ASCII.GetBytes(postData)

myWebClient.Headers.Add("Content-Type", "multipart/form-data")

' UploadData implicitly sets HTTP POST as the request method.
Dim responseArray As Byte() = myWebClient.UploadData(uriString, postArray)

' Decode and display the response.
testo.text = Encoding.ASCII.GetString(responseArray)

però se insieme alla stringa dati da inviare devo inviare assieme anche un file che carico tramite file upload come faccio ad aggiungerlo alla stringa e poi al ByteArray?

vi ringrazio e scusate ancora se rompo ma non ne vengo fuori....
13 messaggi dal 27 settembre 2006
provo a spiegarmi in modo diverso

praticamente in html ho questo codice:

<form enctype="multipart/form-data" action="http://api.viddler.com/rest/v1/" method="post">

<input type="text" name="method" value="viddler.videos.upload" /><br />
<input type="text" name="api_key" value="APIKEY" /><br />
<input type="text" name="sessionid" value="IDSESSIONE" /><br />
<input type="text" name="title" value="titolo del video" /><br />
<input type="text" name="tags" value="tag del video" /><br />
<input type="text" name="description" value="descrizione del video" /><br />
<input type="text" name="make_public" value="1" /><br />
<input type="file" name="file" />
<input type="submit" />
</form>

e lo voglio convertire in l'invio di questi dati in asp.net senza che però mi si visualizzi la pagina di risposta che c'è nell'attributo action... spero di essermi spiegato meglio...
Modificato da Zivi_SGC il 05 maggio 2009 09.27 -
Zivi_SGC ha scritto:
provo a spiegarmi in modo diverso


l'avevo capito benissimo anche prima. se avessi letto e provato il codice del secondo link che ti ho postato, avresti trovato la risposta a quello che cerchi.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
13 messaggi dal 27 settembre 2006
l'ho letto ma non riesco a capire e riscrivere questo in vb

FileStream fileStream = new FileStream(files[i], FileMode.Open,
FileAccess.Read);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ( (bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0 )
{
memStream.Write(buffer, 0, bytesRead);
}


io l'ho scritto così...

dim filestream as filestream = new FileStream(server.MapPath("prova.mov"), FileMode.Open, FileAccess.Read)


dim buffer as byte()

dim bytesRead as integer

e qua mi sono bloccato non riesco a tradurre quel ciclo while perché non l'ho capito (bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.