Existe alguma classe, biblioteca ou algum código que me ajude a fazer upload de arquivos com o HTTPWebrequest ?
Edição 2:
Não quero fazer upload para uma pasta WebDAV ou algo parecido. Quero simular um navegador, assim como você carrega seu avatar em um fórum ou carrega um arquivo via formulário em um aplicativo da web. Faça o upload para um formulário que usa dados de várias partes / formulário.
Editar:
O WebClient não cobre meus requisitos, por isso estou procurando uma solução com o HTTPWebrequest .
.net
upload
httpwebrequest
dr. mal
fonte
fonte
Respostas:
Tomou o código acima e corrigiu porque lança o Internal Server Error 500. Há alguns problemas com \ r \ n mal posicionados e espaços etc. Aplicada a refatoração com fluxo de memória, gravando diretamente no fluxo de solicitação. Aqui está o resultado:
e uso de amostra:
Pode ser estendido para lidar com vários arquivos ou apenas chamá-lo várias vezes para cada arquivo. No entanto, atende às suas necessidades.
fonte
"\r\n--" + boundary + "--\r\n"
caso contrário, os arquivos adicionais serão cortados.Eu estava procurando por algo parecido com isto, encontrado em: http://bytes.com/groups/net-c/268661-how-upload-file-via-c-code (modificado para correção):
fonte
ATUALIZAÇÃO: usando o .NET 4.5 (ou .NET 4.0 adicionando o pacote Microsoft.Net.Http do NuGet) isso é possível sem código externo, extensões e manipulação de HTTP de "baixo nível". Aqui está um exemplo:
fonte
Minhas perguntas frequentes sobre o upload do ASP.NET têm um artigo sobre o assunto, com o seguinte exemplo: Carregar arquivos usando uma solicitação RFC 1867 POST com HttpWebRequest / WebClient . Este código não carrega arquivos na memória (em oposição ao código acima), suporta vários arquivos e valores de formulário, definindo credenciais e cookies, etc.
Editar: parece que o Axosoft derrubou a página. Obrigado rapazes.
Ainda está acessível via archive.org.
fonte
Com base no código fornecido acima, adicionei suporte a vários arquivos e também ao upload de um fluxo diretamente, sem a necessidade de ter um arquivo local.
Para fazer upload de arquivos para um URL específico, incluindo alguns parâmetros de postagem, faça o seguinte:
Para melhorar ainda mais, é possível determinar o nome e o tipo mime do próprio arquivo.
fonte
algo assim está próximo: (código não testado)
fonte
Acho que você está procurando algo mais parecido com o WebClient .
Especificamente, UploadFile () .
fonte
Tomou o acima e modificou-o aceita alguns valores de cabeçalho e vários arquivos
fonte
\r\n--" + boundary + "--\r\n
Exemplo de VB (convertido do exemplo de C # em outra postagem):
fonte
Eu tive que lidar com isso recentemente - outra maneira de abordar isso é usar o fato de que o WebClient é herdável e alterar o WebRequest subjacente a partir daí:
http://msdn.microsoft.com/en-us/library/system.net.webclient.getwebrequest(VS.80).aspx
Eu prefiro C #, mas se você estiver com o VB, os resultados serão mais ou menos assim:
fonte
Há outro exemplo de trabalho com alguns dos meus comentários:
E há um exemplo de uso:
fonte
Eu estava procurando fazer o upload de arquivos e adicionar alguns parâmetros a uma solicitação multipart / dados de formulário no VB.NET e não através de uma publicação regular de formulários. Graças à resposta @ JoshCodes, recebi a direção que estava procurando. Estou postando minha solução para ajudar outras pessoas a encontrar uma maneira de executar uma postagem com arquivos e parâmetros, o equivalente em html do que tento alcançar é: html
Devido ao fato de eu precisar fornecer a apiKey e a assinatura (que é uma soma de verificação calculada dos parâmetros de solicitação e da seqüência concatenada da chave api), eu precisava fazer isso no lado do servidor. A outra razão pela qual eu precisava fazer isso no lado do servidor é o fato de que a postagem do arquivo pode ser executada a qualquer momento, apontando para um arquivo já no servidor (fornecendo o caminho), para que não haja arquivo selecionado manualmente durante o formulário post, portanto, o arquivo de dados do formulário não conteria o fluxo de arquivos. Caso contrário, eu poderia ter calculado a soma de verificação por meio de um retorno de chamada ajax e enviado o arquivo pela postagem em html usando o JQuery. Estou usando o .net versão 4.0 e não consigo atualizar para o 4.5 na solução real. Então eu tive que instalar o Microsoft.Net.Http usando nuget cmd
fonte
O código @CristianRomanescu modificado para trabalhar com fluxo de memória, aceitar arquivo como uma matriz de bytes, permitir nvc nulo, retornar resposta de solicitação de retorno e trabalhar com cabeçalho de autorização. Teste o código com o Web Api 2.
Código de teste:
fonte
Para mim, os seguintes trabalhos (principalmente inspirados em todas as respostas a seguir), parti da resposta do Elad e modificamos / simplificamos as coisas para atender às minhas necessidades (remover não as entradas do formulário de arquivo, apenas um arquivo, ...).
Espero que possa ajudar alguém :)
(PS: eu sei que o tratamento de exceções não foi implementado e supõe que ele tenha sido escrito dentro de uma classe, portanto, talvez seja necessário algum esforço de integração ...)
fonte
Não tenho certeza se isso foi publicado antes, mas consegui trabalhar com o WebClient. eu li a documentação para o WebClient. Um ponto chave que eles fazem é
Então, tudo o que fiz foi wc.QueryString.Add ("source", generateImage) para adicionar os diferentes parâmetros de consulta e, de alguma forma, ele corresponde ao nome da propriedade com a imagem que eu carreguei. Espero que ajude
fonte
Eu escrevi uma aula usando o WebClient desde quando fazer o upload de formulários com várias partes.
http://ferozedaud.blogspot.com/2010/03/multipart-form-upload-helper.html
Isso funcionará com todas as versões da estrutura .NET.
fonte
Eu nunca consigo fazer os exemplos funcionarem corretamente, sempre recebo um erro 500 ao enviá-lo ao servidor.
No entanto, me deparei com um método muito elegante de fazê-lo neste URL
É facilmente extensível e, obviamente, funciona com arquivos binários e XML.
Você chama usando algo semelhante a este
fonte
Confira a biblioteca MyToolkit:
http://mytoolkit.codeplex.com/wikipage?title=Http
fonte
O cliente usa o arquivo
ToBase64String
Convert para depois usar o XML para promulgar a chamada do servidor, esse servidor usaFile.WriteAllBytes(path,Convert.FromBase64String(dataFile_Client_sent))
.Boa sorte!
fonte
Este método funciona para fazer upload de várias imagens simultaneamente
fonte
Sei que provavelmente é muito tarde, mas estava procurando a mesma solução. Encontrei a seguinte resposta de um representante da Microsoft
fonte