标签: multipart

Ruby中的多部分文件上载

我只是想用POST将图像上传到服务器.就像这个任务听起来那么简单,Ruby中似乎没有简单的解决方案.

在我的应用程序中,我使用WWW :: Mechanize进行大多数事情,所以我也想使用它,并且有这样的来源:

f = File.new(filename, File::RDWR)
reply = agent.post(
    'http://rest-test.heroku.com',
    {
         :pict       =>  f,
         :function   =>  'picture2',
         :username   =>  @username,
         :password   =>  @password,
         :pict_to    =>  0,
         :pict_type  =>  0
    }
)
f.close
Run Code Online (Sandbox Code Playgroud)

这导致服务器上完全垃圾就绪的文件看起来遍布:

alt text http://imagehub.org/f/1tk8/garbage.png

我的下一步是将WWW :: Mechanize降级到版本0.8.5.这一直有效,直到我试图运行它,但失败了,例如"在hpricot_scan.so中找不到模块"这样的错误.使用Dependency Walker工具我可以发现hpricot_scan.so需要msvcrt-ruby18.dll.然而,在我将.dll放入我的Ruby/bin文件夹后,它给了我一个空的错误框,从那里我无法进一步调试.所以这里的问题是Mechanize 0.8.5依赖于Hpricot而不是Nokogiri(它完美无缺).


下一个想法是使用不同的gem,所以我尝试使用Net :: HTTP.经过简短的研究后,我发现在Net :: HTTP中没有对多部分表单的本机支持,而是你必须构建一个为你编码等的类.我能找到的最有帮助的是Stanislav VitvitskiyMultipart-class.到目前为止,这个类看起来不错,但它不能满足我的需求,因为我不想发布文件,我也想发布正常的数据,这对他的班级来说是不可能的.


我的最后一次尝试是使用RestClient.这看起来很有希望,因为有关于如何上传文件的例子.然而,我无法将其作为多部分发布.

f = File.new(filename, File::RDWR)
reply = RestClient.post(
    'http://rest-test.heroku.com',
    :pict       =>  f,
    :function   =>  'picture2',
    :username   =>  @username,
    :password   =>  @password, …
Run Code Online (Sandbox Code Playgroud)

ruby upload http mechanize multipart

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

在java中解析Multipart /与Multipart/Alternative主体混合

我从客户端收到电子邮件,他们在multipart/mixed消息中嵌套了multipart/alternative消息.当我得到消息的正文时,它只返回multipart/alternative级别,而我真正想要的是包含在multipart/alternative中的text/html部分.

我查看了javax.mail的javadocs,我找不到一个简单的方法来获取bodypart的主体,它本身是一个multipart或跳过第一个multipart/mixed部分并进入multipart/alternative body来读取text/html和text/plain pieces.

电子邮件结构如下所示:

...
Content-Type: multipart/mixed; 
    boundary="----=_Part_19487_1145362154.1418138792683"

------=_Part_19487_1145362154.1418138792683
Content-Type: multipart/alternative; 
    boundary="----=_Part_19486_1391901275.1418138792683"

------=_Part_19486_1391901275.1418138792683
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=ISO-8859-1

...

------=_Part_19486_1391901275.1418138792683
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset=ISO-8859-1

...

------=_Part_19486_1391901275.1418138792683--

------=_Part_19487_1145362154.1418138792683--
Run Code Online (Sandbox Code Playgroud)

这是用于解析电子邮件的代码的大纲:

Message [] found = fldr.search(searchCondition);           
for (int i = 0; i < found.length; i++) {
    Message m = found[i];
    Object o = m.getContent();
    if (o instanceof Multipart) {
        log.info("**This is a Multipart Message.  ");
        Multipart mp = (Multipart)o;
        log.info("The Multipart message has " + mp.getCount() + " parts.");
        for (int …
Run Code Online (Sandbox Code Playgroud)

java email multipart jakarta-mail javax.mail

7
推荐指数
1
解决办法
5421
查看次数

如何解析MultipartFormDataContent

我正在编写一个Web API服务,我想接受一个文件(图像)和一个包含图像关键信息的序列化对象(JSON).没有图像部分的问题但是当我添加包含反序列化对象的字符串内容时,我在尝试确定哪个是哪个并且相应地采取行动时遇到问题.

客户端代码如下所示:

HttpClient client = new HttpClient();

MultipartFormDataContent content = new MultipartFormDataContent();
content.Add(new StreamContent(File.Open("c:\\MyImages\\Image00.jpg", FileMode.Open)), "image_file", "Image00.jpg");

ImageKeys ik = new ImageKeys { ImageId = "12345", Timestamp = DateTime.Now.ToString() };
JavaScriptSerializer js = new JavaScriptSerializer();
if (ik != null)
{
    content.Add(new StringContent(js.Serialize(ik), Encoding.UTF8, "application/json"), "image_keys");
}

string uri = "http://localhost/MyAPI/api/MyQuery/TransferFile";
var request = new HttpRequestMessage()
{
    RequestUri = new Uri(uri),
    Method = HttpMethod.Post
};

request.Content = content;

string responseStr = "";
try
{
    HttpResponseMessage result = client.SendAsync(request).Result;
    string resultContent …
Run Code Online (Sandbox Code Playgroud)

c# json multipart asp.net-web-api

7
推荐指数
1
解决办法
1941
查看次数

无法从改造中POST多部分数据2

我必须以这种格式发送一个帖子请求.

--__X_PAW_BOUNDARY__
Content-Disposition: form-data; name="user_photo[image]"; filename="file.jpg"
Content-Type: image/jpeg

ÿØÿàJFIFHHÿáLExifMM*i    
ÿí8Photoshop 3.08BIM8BIM%ÔÙ²é   ìøB~ÿÀ
 "ÿÄ    
ÿĵ}!1AQa"q2¡#B±ÁRÑð$3br    
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ 
ÿĵw!1AQaq"2B¡±Á    #3RðbrÑ
$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛC                                       ÿÛC                                                                                                                                                                                                         ÿÝZÿÚ?ü_¢+þæð¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¯ë3þ
Run Code Online (Sandbox Code Playgroud)

我基本上试图在邮件请求中发送一张照片,其名称user_photo[image]如下图所示:

在此输入图像描述

以下是我考虑过的解决方案的片段:

    Call<models.UploadResponse> uploadPhoto(@Path("id") int userId, @Part MultipartBody.Part file);


        MultipartBody.Part body = MultipartBody.Part.createFormData("user_photo[image]", file.getName(), requestFile);
Call<models.UploadResponse> call = userRequest.uploadPhoto(62, body);



    RequestBody requestFile =
            RequestBody.create(MediaType.parse("image/*"), FileUtils.getFile(PhotoUploadActivity.this, fileUri));
    Call<models.UploadResponse> call = userRequest.uploadPhoto(62, requestFile);

    Call<models.UploadResponse> uploadPhoto(@Path("id") int userId, @Part ("name=\"user_photo[image]\"") RequestBody file);

    @Multipart
        @POST("users/{id}/user_photos")
    Call<models.UploadResponse> uploadPhoto(@Path("id") int userId, @Part("name=\"user_photo[image]\"") RequestBody file);
Run Code Online (Sandbox Code Playgroud)

这是okhttp日志:

D/OkHttp: Content-Type: multipart/form-data; boundary=75e8ae2e-a160-413f-82d1-3afd94f22c43
D/OkHttp: Content-Length: 43706
D/OkHttp: ??????JFIF?????????????????Photoshop …
Run Code Online (Sandbox Code Playgroud)

android multipartform-data multipart retrofit retrofit2

7
推荐指数
2
解决办法
5066
查看次数

具有多个范围请求的Javascript Fetch API获取二进制Float32Array数据

我正在使用范围请求从大型二进制文件中读取许多 32 位浮点数,不幸的是,我需要从该文件中获得的浮点数位于文件的不同部分,因此我需要对多个范围进行范围请求

fetch("http://example.com/largeBinaryFile.bin", {
        headers: {
            'content-type': 'multipart/byteranges',
            'range': 'bytes=2-5,10-13',
        },
    })
    .then(response => {
        if (response.ok) {
            return response.text();
        }
    })
    .then(response => {
        console.log(response);
    });
Run Code Online (Sandbox Code Playgroud)

由于有多个范围,我必须使用文本而不是 arrayBuffer,当我打印出响应时,我得到

--00000000000000000002
Content-Type: application/octet-stream
Content-Range: bytes 2-5/508687874

1ȹC
--00000000000000000002
Content-Type: application/octet-stream
Content-Range: bytes 10-13/508687874

þC
--00000000000000000002--
Run Code Online (Sandbox Code Playgroud)

如您所见,二进制数据位于不同的部分,我尝试使用 Blob 和 FileReader 将数据转换为 arrayBuffer 并用 Float32Array 包装,但没有成功。请问如何从multiparts中获取32位浮点值?非常感谢您的帮助。

javascript blob multipart arraybuffer

6
推荐指数
1
解决办法
2561
查看次数

使用 Python 提取多部分 zip

我正在寻找一种在 Windows 上使用 python 提取多部分 zip 文件(例如 blah.zip、blah.z01、blah.z02、blah.z03 等)的方法,而无需安装任何先决条件(如 7zip)。这个问题已经被问过,但唯一的答案是使用本地 7zip 安装,我宁愿避免,而且我没有足够的声誉向该线程添加评论。

我正在开发一个独立的 Windows 桌面应用程序,使用 python 来实现主要功能,其主要功能之一的重要部分是能够提取提供给它的 zip 文件。目前,我正在使用随该工具分发的便携式 7zip (7za) 来执行此操作,但由于新情况,我还需要支持多部分 zip 文件,但我似乎无法执行此操作。

我当前的代码很简单

subprocess.call('7za x -o"'+destinationPath+'" "'+zipPath+'"')
Run Code Online (Sandbox Code Playgroud)

这适用于普通 zip,但对于多部分 zip,什么也没有发生,通过 cmd 手动运行它,我得到输出

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
Processing archive: zipname.zip
Error: Can not open file as archive
Run Code Online (Sandbox Code Playgroud)

尽管桌面 7zip 完全能够使用完全相同的存档来完成此操作。我是否遗漏了 7za 命令语法中的某些内容?如果没有,除了要求用户确保安装了桌面 7zip 并尝试通过注册表等检测它的位置之外,还有其他选择吗?

我也尝试过使用 python 的 Zipfile 库,但这让我

error: "BadZipFile: Bad magic number for file header"
Run Code Online (Sandbox Code Playgroud)

正如另一个线程所指出的。

提前谢谢了!

python zip 7zip multipart

6
推荐指数
1
解决办法
4648
查看次数

如何在Retrofit 2 Kotlin中的post参数中发送任何类型的文件?

让我分享一些我已经实现的代码,用于在请求中发送图像文件。

下面是我的api请求函数:

@Multipart
@POST("api/order/order_create")
fun createOrder(
    @Header("Authorization") authorization: String?,
    @Part("category_id") categoryId: RequestBody?,
    @Part("size") size: RequestBody?,
    @Part("narration") narration: RequestBody?,
    @Part("ref_picture") file: RequestBody?
): Call<OrderCreateResponse>
Run Code Online (Sandbox Code Playgroud)

下面是我通过发送必要的参数来调用 api 的代码:

var fbody = RequestBody.create(MediaType.parse("image/*"), imageFile)
var size = RequestBody.create(MediaType.parse("text/plain"), et_custom_order_size.text.toString())
var catId = RequestBody.create(MediaType.parse("text/plain"), selectedID.toString())
var narration = RequestBody.create(MediaType.parse("text/plain"),et_custom_order_narration.text.toString())

val orderCreateAPI = apiService!!.createOrder(complexPreferences?.getPref("token", null), catId,size,narration,fbody)
Run Code Online (Sandbox Code Playgroud)

这里 imageFile 是通过以下方式获取的,

imageFile = File(Global.getRealPathFromURI(activity!!, imageUri!!))
Run Code Online (Sandbox Code Playgroud)

使用下面的函数来获取真实路径,

fun getRealPathFromURI(context: Context, contentUri: Uri): String {
        var cursor: Cursor? = null
        try {
            val proj = arrayOf(MediaStore.Images.Media.DATA)
            cursor = context.contentResolver.query(contentUri, …
Run Code Online (Sandbox Code Playgroud)

android multipart kotlin retrofit2

6
推荐指数
1
解决办法
7844
查看次数

我们可以在 Spring Rest 模板中为分段文件上传设置自定义边界吗

我想创建一个自定义边界来使用 Spring Rest 模板发送一些 json 数据和一些文件。我无法添加该自定义边界。我无法覆盖获取一些随机字符串作为边界值的默认行为。下面是我的代码片段。有人可以建议如何获得自定义边界吗?

 HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_MIXED);
    headers.set("boundary", "MyCustomboundary");
    headers.set("accepts", "multipart/mixed");


    MultiValueMap<String, Object> multipartRequest = new LinkedMultiValueMap<>();
Run Code Online (Sandbox Code Playgroud)

“为 JSON 部分创建 HttpEntity”

    HttpHeaders jsonHeader = new HttpHeaders();
    jsonHeader.setContentType(MediaType.APPLICATION_JSON);
    jsonHeader.set( "Content-Disposition","form-data");
    jsonHeader.set("boundary", "MyCustomboundary");
    jsonHeader.set( "name","Metadata");

    ContentDisposition contentDisposition = ContentDisposition
            .builder("form-data")
            .name("file")
            .filename("FileName"))
            .build();

    JSONObject json = getJSONObject();
    HttpEntity<String> jsonHttpEntity = new HttpEntity<>(json.toString(), jsonHeader);
Run Code Online (Sandbox Code Playgroud)

'为二进制部分创建 HttpEntity'

    HttpHeaders pictureHeader = new HttpHeaders();
    pictureHeader.set( "Content-Disposition","form-data");
    pictureHeader.set( "name","Content");
    pictureHeader.set("filename","FileNameTest");
    pictureHeader.set("Content-Type", "application/octet-stream");
    pictureHeader.set("boundary", "MyCustomboundary");

    HttpEntity<ByteArrayResource> picturePart = new HttpEntity<>(new ByteArrayResource(multipartFile.getBytes()), pictureHeader);
Run Code Online (Sandbox Code Playgroud)

'将两个部分放在一个请求中' …

spring multipartform-data multipart resttemplate spring-boot

6
推荐指数
0
解决办法
1950
查看次数

使用 Quarkus 处理多部分/表单数据

我遇到一个问题,我无法在资源中获取表单,变量始终为空

我的资源:

    @POST
    @Path("/upload-logo")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.TEXT_PLAIN)
    public String uploadLogo (@MultipartForm LogoMultipartForm logoMultipartForm) throws IOException {
        return this.companyService.uploadLogo(username, logoMultipartForm.logo);

    }
Run Code Online (Sandbox Code Playgroud)

表格模型

public class LogoMultipartForm {

    @FormParam("logo")
    public byte[] logo;

    @FormParam("filename")
    @PartType("text/plain")
    public String fileName;
}
Run Code Online (Sandbox Code Playgroud)

我的获取请求:

  uploadLogo: async (file: File) => {
    const form = new FormData();
    form.append("logo", file, "logo.png");
    form.append("filename", "test");

    const { query, abort } = HttpClient.POST(`${COMPANY_URL}/upload-logo`, form);
    let promise = query
      .then((res: any) => {
        console.log("Response", res);
        if (res.status === 200) {
          return res.text();
        } else {
          throw …
Run Code Online (Sandbox Code Playgroud)

multipartform-data multipart resteasy quarkus

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

Flutter:多部分文件请求不起作用

我想通过多部分文件请求上传图像。使用此代码当我传递两个图像文件时,它工作正常。但是,当我想传递一个图像文件而另一个图像文件为空时,它就不起作用。哪里有问题?我该如何解决这个问题?

这是我的代码 -

Future<Map<String, dynamic>> updateprofile(
      UpdateProfileInfo updateProfileInfo,
      File imageFile,
      File signatureFile) async {

    String url = "$baseAPIUrl/update-profile-info";
    String _token = await SavedData().loadToken();
    String authorization = "Bearer $_token";

    final headers = {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      "Authorization": authorization
    };

    var request = http.MultipartRequest("POST", Uri.parse(url));

    request.headers.addAll(headers);
    request.fields.addAll(updateProfileInfo.toJson());

    request.files
        .add(await http.MultipartFile.fromPath('image', imageFile.path));
    request.files.add(
        await http.MultipartFile.fromPath('signature', signatureFile.path));

    print(" Update Profile Json ${updateProfileInfo.toJson()}");
    print("Request Fields ${request.fields}");
    http.StreamedResponse response = await request.send();

    String respStr = await response.stream.bytesToString();
    dynamic respJson;

    try {
      respJson = jsonDecode(respStr);
    } …
Run Code Online (Sandbox Code Playgroud)

api http multipart flutter

6
推荐指数
1
解决办法
8314
查看次数