我正在尝试从我的电脑上传图像到一个使用Go的网站。通常,我使用一个bash脚本,向服务器发送一个文件和一个密钥:
curl -F "image"=@"IMAGEFILE" -F "key"="KEY" URL
下面是一些示例代码。
简而言之,您需要使用mime/multipart
包来构建表单。
package main
import (
"bytes"
"fmt"
"io"
"mime/multipart"
"net/http"
"net/http/httptest"
"net/http/httputil"
"os"
"strings"
)
func main() {
var client *http.Client
var remoteURL string
{
//setup a mocked http client.
ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
b, err := httputil.DumpRequest(r, true)
if err != nil {
panic(err)
}
fmt.Printf("%s", b)
}))
defer ts.Close()
client = ts.Client()
remoteURL = ts.URL
}
//prepare the reader instances to encode
values := map[string]io.Reader{
"file": mustOpen("main.go"), // lets assume its this file
"other": strings.NewReader("hello world!"),
}
err := Upload(client, remoteURL, values)
if err != nil {
panic(err)
}
}
func Upload(client *http.Client, url string, values map[string]io.Reader) (err error) {
// Prepare a form that you will submit to that URL.
var b bytes.Buffer
w := multipart.NewWriter(&b)
for key, r := range values {
var fw io.Writer
if x, ok := r.(io.Closer); ok {
defer x.Close()
}
// Add an image file
if x, ok := r.(*os.File); ok {
if fw, err = w.CreateFormFile(key, x.Name()); err != nil {
return
}
} else {
// Add other fields
if fw, err = w.CreateFormField(key); err != nil {
return
}
}
if _, err = io.Copy(fw, r); err != nil {
return err
}
}
// Don't forget to close the multipart writer.
// If you don't close it, your request will be missing the terminating boundary.
w.Close()
// Now that you have a form, you can submit it to your handler.
req, err := http.NewRequest("POST", url, &b)
if err != nil {
return
}
// Don't forget to set the content type, this will contain the boundary.
req.Header.Set("Content-Type", w.FormDataContentType())
// Submit the request
res, err := client.Do(req)
if err != nil {
return
}
// Check the response
if res.StatusCode != http.StatusOK {
err = fmt.Errorf("bad status: %s", res.Status)
}
return
}
func mustOpen(f string) *os.File {
r, err := os.Open(f)
if err != nil {
panic(err)
}
return r
}
问题内容: 如何发布到Content-Type:multipart / form-data,[] byte参数和字符串参数的API?我已经尝试过,但是失败了。 错误信息: 转到代码: 问题答案: 现在,我很高兴分享我的解决方案 } }
问题内容: 我正在尝试使用go将图像从计算机上传到网站。通常,我使用bash脚本将文件和密钥发送到服务器: 它工作正常,但我正在尝试将此请求转换为我的golang程序。 http://matt.aimonetti.net/posts/2013/07/01/golang-multipart-file-upload- example/ 我尝试了此链接和许多其他链接,但是,对于我尝试的每个代码,服务器的
我正在尝试使用curl向REST服务发布一个xml文件(utf-16编码)。REST服务需要“multipart/form-data”内容类型。 Curl脚本:Curl-k-i-h“content-type=multipart/form-data”-f“filename=@file.xml;type=text/xml”-x POST-u: 然而,我在运行脚本时得到500个内部服务器错误。 响应:<
问题内容: 我正在一个ASP.NET MVC网站上工作,该网站的表单允许使用表单标签上的multipart / form data enctype选项上传文件,如下所示 我将如何编写此代码来代替进行ASP.NET MVC Ajax表单发布? 问题答案: 您可以使用其他一些上传器(例如jQuery多个文件上传器)(我更喜欢这种方式,而且我不喜欢使用MS Ajax) 采用: 但是在第二种情况下,我不确
我不知道为什么不能让jQuery传递上传数据,因为AJAX对象似乎配置正确,并且发送了正确的content-type/mime-type头部。 我尝试了两种不同的请求形式--一种是将FormData对象包含在文本中,另一种是直接传递FormData对象。 不幸的是,不管怎样,我都无法传递任何内容,$_files和$_post都是空数组。
我试图用C#代码在一个请求中上传image和json,但服务器总是返回400个错误的请求。使用fiddler执行相同的请求返回状态代码200。帮忙... 以下是我的小提琴手代码: ------WebKitFormBoundary7MA4YWXKTRZU0GW内容-配置:表单-数据;name=“application/json”content-type:application/json 反应总是一样