标签: multipartform-data

Web API:如何在使用MultipartMemoryStreamProvider时访问多部分表单值?

我曾经用来MultipartFormDataStreamProvider处理多部分请求.

由于我希望将上传的文件存储在内存中而不是磁盘文件中,因此我更改了要使用的代码MultipartMemoryStreamProvider.文件加载似乎工作正常,但我不再能够访问通过provider.FormData下面提供的其他表单值MultipartFormDataStreamProvider.有人能告诉我怎么做吗?

Fiddler捕获的原始请求:

POST http://myserver.com/QCCSvcHost/MIME/RealtimeTrans/ HTTP/1.1
Content-Type: multipart/form-data; boundary="XbCY"
Host: na-w-lxu3
Content-Length: 1470
Expect: 100-continue
Connection: Keep-Alive

--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=PayloadType

X12_270_Request_005010X279A1
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=ProcessingMode

RealTime
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=PayloadID

e51d4fae-7dec-11d0-a765-00a0c91e6fa6
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=TimeStamp

2007-08-30T10:20:34Z
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=SenderID

HospitalA
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=ReceiverID

PayerB
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=CORERuleVersion …
Run Code Online (Sandbox Code Playgroud)

multipartform-data asp.net-web-api

46
推荐指数
1
解决办法
3万
查看次数

WebAPI文件上传 - 无需将文件写入磁盘

有关处理使用FormData上载到ASP.NET WebAPI处理程序的文件的所有文档/教程/问题MultipartFormDataStreamProvider用于处理多部分流以将其拆分为相关的表单字段和文件.

var root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);

await Request.Content.ReadAsMultipartAsync(provider);

foreach (MultipartFileData file in provider.FileData)
{
   // File
}
Run Code Online (Sandbox Code Playgroud)

但是,在处理期间,文件会自动写入目录.

当我可以HttpContext.Current.Request.Files[0].InputStream直接在内存中使用访问给定的文件流时,似乎有很多麻烦.

WebAPI如何直接访问文件流而无需使用IO开销MultipartFormDataStreamProvider

官方教程:http://www.asp.net/web-api/overview/advanced/sending-html-form-data,-part-2

c# asp.net multipartform-data asp.net-web-api

45
推荐指数
1
解决办法
4万
查看次数

MULTIPART_FORM_DATA:找不到类型为public javax.ws.rs.core.Response的参数的注入源

我正在使用基于Jersey的restful Service实施策略来构建将用于上传文件的服务.我的服务类名是:UploadFileService.java(参见下面的代码)

 package com.jerser.service;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;

@Path("/fileUpload")
public class UploadFileService {

    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") FormDataContentDisposition fileDetail) {

        String uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName();

        // save it
        writeToFile(uploadedInputStream, uploadedFileLocation);

        String output = "File uploaded to : " + uploadedFileLocation;

        return Response.status(200).entity(output).build();

    }

    // save uploaded file to new location
    private void writeToFile(InputStream …
Run Code Online (Sandbox Code Playgroud)

java rest multipartform-data jersey jersey-2.0

43
推荐指数
3
解决办法
5万
查看次数

IE尝试在提交包含文件的jQuery多部分表单数据时下载json响应

我试图file通过jQuery.Form插件提交一个带有字段的表单,这里是代码:

$('form').ajaxSubmit({
  url: "/path",
  dataType: "json",
  contentType: "multipart/form-data"
...
Run Code Online (Sandbox Code Playgroud)

然后服务器返回json作为响应.在除IE之外的所有浏览器中都很好用,它试图将响应下载为文件.如果我从表单中删除文件字段,它也可以正常工作.

我在这里和谷歌已经看到了各种解决方案,基本上几乎尝试了所有描述的内容,包括enctype通过jQuery 设置表单,但它没有用.

任何建议都会受到欢迎.

ajax internet-explorer json multipartform-data jqueryform

39
推荐指数
3
解决办法
3万
查看次数

简单的HttpURLConnection POST文件multipart/form-data从android到google blobstore

我不知道html是如何工作的.我想要做的是与以下内容完全类似,但在android上

<body>
    <form action="<%= some_url %>" method="post" enctype="multipart/form-data">
        <input type="file" name="myFile">
        <input type="submit" value="Submit">
    </form>
</body>
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码 -

private static void postToUrl(String url_to_upload_on,
        String file_name_with_ext, byte[] byteArray) {

    String attachmentName = "file";
    String attachmentFileName = file_name_with_ext;
    String crlf = "\r\n";
    String twoHyphens = "--";
    String boundary =  "*****";

    try{

    URL url = new URL(url_to_upload_on);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");

    connection.setRequestProperty(
        "Content-Type", "multipart/form-data;boundary=" + boundary);
    DataOutputStream request = new DataOutputStream(
            connection.getOutputStream()); 
    request.writeBytes(twoHyphens + boundary + crlf);
    request.writeBytes("Content-Disposition: form-data; …
Run Code Online (Sandbox Code Playgroud)

android multipartform-data file httpurlconnection blobstore

39
推荐指数
3
解决办法
5万
查看次数

使用RestTemplate请求将Multipart File作为POST参数发送

我正在使用Spring 3和RestTemplate.我基本上有两个应用程序,其中一个必须将值发布到另一个应用程序.通过休息模板.

当要发布的值是字符串时,它的工作完美,但是当我必须发布混合和复杂的参数(如MultipartFiles)时,我会得到转换器异常.

例如,我有这个:

App1 - PostController:

@RequestMapping(method = RequestMethod.POST)
public String processSubmit(@ModelAttribute UploadDTO pUploadDTO, 
        BindingResult pResult) throws URISyntaxException, IOException {
    URI uri = new URI("http://localhost:8080/app2/file/receiver");

    MultiValueMap<String, Object> mvm = new LinkedMultiValueMap<String, Object>();
    mvm.add("param1", "TestParameter");
    mvm.add("file", pUploadDTO.getFile()); // MultipartFile

    Map result = restTemplate.postForObject(uri, mvm, Map.class);
    return "redirect:postupload";
}
Run Code Online (Sandbox Code Playgroud)

另一方面......我有另一个Web应用程序(App2)从App1接收参数.

App2 - ReceiverController

@RequestMapping(value = "/receiver", method = { RequestMethod.POST })
public String processUploadFile(
        @RequestParam(value = "param1") String param1,
        @RequestParam(value = "file") MultipartFile file) {

    if (file == null) {
        System.out.println("Shit!... …
Run Code Online (Sandbox Code Playgroud)

multipartform-data spring-mvc resttemplate

38
推荐指数
6
解决办法
11万
查看次数

使用$ http发送带角度的multipart/form-data文件

我知道有很多关于此的问题,但我无法让这个工作:

我想在multipart/form-data中将文件从输入上传到服务器

我尝试了两种方法.第一:

headers: {
  'Content-Type': undefined
},
Run Code Online (Sandbox Code Playgroud)

这导致例如图像

Content-Type:image/png
Run Code Online (Sandbox Code Playgroud)

而它应该是multipart/form-data

和另外一个:

headers: {
  'Content-Type': multipart/form-data
},
Run Code Online (Sandbox Code Playgroud)

但这要求一个边界标题,我相信不应该手动插入...

什么是解决这个问题的干净方法?我读过你能做到的

$httpProvider.defaults.headers.post['Content-Type'] = 'multipart/form-data; charset=utf-8';
Run Code Online (Sandbox Code Playgroud)

但我不希望我的所有帖子都是multipart/form-data.默认值应为JSON

file-upload http multipartform-data http-headers angularjs

37
推荐指数
3
解决办法
8万
查看次数

ASP.NET Web API文件另存为"BodyPart_3ded2bfb-40be-4183-b789-9301f93e90af"

我正在使用ASP.NET Web API上传文件.我在RC之前做过这个,但由于某种原因,文件被保存为"BodyPart_3ded2bfb-40be-4183-b789-9301f93e90af"而不是文件名.下面的filename变量也会返回此bodypart字符串而不是文件名.我似乎无法弄清楚我哪里出错了.任何帮助表示赞赏.

客户代码:

function upload() {
    $("#divResult").html("Uploading...");
    var formData = new FormData($('form')[0]); 
    $.ajax({
        url: 'api/files/uploadfile?folder=' + $('#ddlFolders').val(),
        type: 'POST',
        success: function (data) {
            $("#divResult").html(data);
        },
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
}; 
Run Code Online (Sandbox Code Playgroud)

控制器:

    public Task<HttpResponseMessage> UploadFile([FromUri]string folder)
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
        }

        // Save file
        MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/Files"));
        Task<IEnumerable<HttpContent>> task = Request.Content.ReadAsMultipartAsync(provider);

        return task.ContinueWith<HttpResponseMessage>(contents =>
        {
            string filename = provider.BodyPartFileNames.First().Value;
            return new HttpResponseMessage()
          {
              Content = new StringContent(string.Format("File saved in {0}.", …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc http multipartform-data file asp.net-web-api

34
推荐指数
3
解决办法
2万
查看次数

org.springframework.web.multipart.MultipartException:当前请求不是多部分请求

我正在尝试向服务器发送多部分请求,但我收到以下异常HTTP状态500 - 请求处理失败; 嵌套异常是org.springframework.web.multipart.MultipartException:当前请求不是多部分请求

<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-body">
        <form id="imageuploadForm" action="<c:url value="/members/profileimageupload" />" method="POST" enctype="multipart/form-data">
            <div style="width:40%; float:left">
                <div class="fileupload fileupload-new" data-provides="fileupload">
                    <div class="fileupload-preview thumbnail" style="width: 200px; height: 150px;"></div>
                    <div>
                        <span class="btn btn-file">
                            <span class="fileupload-new">Select image</span>
                            <span class="fileupload-exists">Change</span>
                            <input id="imageFile" name="imageFile" type="file" />
                        </span>
                        <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a>
                    </div>
                </div>
            </div>
            <div style="width:40%; float:right" >
                <div class="progress">
                    <div class="bar" style="width: 60%;"></div>
                </div>
            </div>
        </form>
    </div>
    <div class="modal-footer">
       <button class="btn btn-success" id="submit">Upload</button>
       <button …
Run Code Online (Sandbox Code Playgroud)

multipartform-data spring-mvc

34
推荐指数
3
解决办法
8万
查看次数

Spring Controller @RequestBody可以上传文件吗?

我有一个像这样的控制器,我想提交一个包含文件上传的表格以及一些表格数据,如下图所示.另外,我想使用@RequestBody这样做,所以我可以在包装器上使用@Valid注释,因为会添加更多变量.

public @ResponseBody WebResponse<Boolean> updateEUSettings(
    final Locale locale,
    @Validated @ModelAttribute final EUPSettingsWrapper endUserPortalSettingsWrapper) {
}
Run Code Online (Sandbox Code Playgroud)

我的包装是:

public class EUPSettingsWrapper {

    private String label;
    private MultipartFile logo;
// getter , setters..etc...
}
Run Code Online (Sandbox Code Playgroud)

但我想将它从ModelAttributes转换为@RequestBody.

我正在尝试的方法是将文件上传分隔为请求参数,如下所示:

public @ResponseBody WebResponse<Boolean> updateEUSettings(
    final Locale locale,
    @Validated @RequestBody final EUPSettingsWrapper endUserPortalSettingsWrapper, 
    @RequestParam(value = "file1", required = true) final MultipartFile logo) {

    endUserPortalSettingsWrapper.setLogo(logo);

    // ...
}
Run Code Online (Sandbox Code Playgroud)

在我的模拟MVC中,我正在设置:

getMockMvc().perform(fileUpload(uri).file(logo)
                        .accept(MediaType.APPLICATION_JSON)
                        .content(JSONUtils.toJSON(wrapper))
                        .contentType(MediaType.MULTIPART_FORM_DATA))
                        .andExpect(status().isOk());
Run Code Online (Sandbox Code Playgroud)

但我收到的错误是这样的:

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data' not supported
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何将Multipart文件上传与@RequestBody一起使用?我上面做错了什么?

spring multipartform-data spring-mvc multipart

32
推荐指数
3
解决办法
5万
查看次数