file.save未以正确格式保存文件

时间:2019-12-20 06:52:18

标签: python flask

我必须在两个地方上传文件,

  1. 在本地目录中
  2. 通过卷曲在吉拉(Jira)

我编写了post端点,该端点从请求中读取文件并通过请求将相同文件发送给Jira,并在成功响应后将其保存在本地。

我的代码如下所示

 for file in request.files.getlist('file'):
     filename = file.filename
     mimetype = file.content_type
     if not is_valid_type(mimetype):
       return json.dumps({"success": False, "message": "Invalid File Format" }), 415
     files = {'file': (filename, file, mimetype)}
     r = requests.post(jira_url, files=files, headers=headers, auth=HTTPBasicAuth(current_app.config.get('username'), current_app.config.get('password')),verify=False)
     LOG.info("Got %s response from %s - text %s", r.status_code, "upload", r.json())
     data = r.json()
     filename = secure_filename(file.filename)
     file.save(os.path.join(current_app.config["UPLOAD_FOLDER"], filename))

它保存文件,但是当我尝试打开它时,它说我们不支持此文件格式。

如果我从循环中删除对Jira的post调用,那么它将以正确的格式保存文件。

1 个答案:

答案 0 :(得分:0)

您尝试过打开/写入吗?:

Main Activity class
package com.deitel.sqlitedatabase_recyclerview;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.database.Cursor;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import com.deitel.sqlitedatabase_recyclerview.adapterclass.NotepadAdapter;
import com.deitel.sqlitedatabase_recyclerview.database.DatabaseHelper;
import com.deitel.sqlitedatabase_recyclerview.modelclass.NotepadModelClass;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    /*attach database class*/
    DatabaseHelper mydb;
    /*attach database class*/
    EditText text_name;
    EditText text_details;
    RecyclerView recyclerView;
    Spinner spinner;
    Button btn_show, btn_view;
    ArrayList<NotepadModelClass> itemslist = new ArrayList<>();
    NotepadAdapter addapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*this called the constructor of database class*/
        mydb=new DatabaseHelper(this);
        /*construct end*/

        text_name = findViewById(R.id.text_name);
        text_details = findViewById(R.id.text_details);
        btn_view = findViewById(R.id.btn_view);
        btn_show = findViewById(R.id.btn_show);
        recyclerView = findViewById(R.id.recyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        addapter = new NotepadAdapter(itemslist);
        recyclerView.setAdapter(addapter);
        spinner = findViewById(R.id.spinner);
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("JAVA");
        arrayList.add("PHP");
        arrayList.add("PYTHON");
        arrayList.add("OOP");
        arrayList.add("C#");
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arrayList);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selecteditems=parent.getItemAtPosition(position).toString();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
        AddData();
        ViewData();
//        btn_show.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                String name = text_name.getText().toString();
//                String details = text_details.getText().toString();
//                String languages = spinner.getSelectedItem().toString();
//                if (TextUtils.isEmpty(name) || TextUtils.isEmpty(details)) {
//                    Toast.makeText(MainActivity.this, "TextField is missing", Toast.LENGTH_SHORT).show();
//                    return;
//                } else {
//
//                    ModelClass modelClass = new ModelClass(name, details, languages);
//                    itemslist.add(modelClass);
//                    text_name.setText("");
//                    text_details.setText("");
//                    addapter.notifyItemInserted(itemslist.size());
//
//
//                }
//            }
//        });

    }
    public  void AddData(){
        btn_show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name=text_name.getText().toString();
                String details=text_details.getText().toString();
                String languages=spinner.getSelectedItem().toString();
                boolean isinserted=mydb.insertdata(name,details,languages);
                NotepadModelClass modelClass =new NotepadModelClass(name,details,languages);
                if (TextUtils.isEmpty(name) || (TextUtils.isEmpty(details))){
                    Toast.makeText(MainActivity.this, "Textfield is missing", Toast.LENGTH_SHORT).show();
                }else {
                    itemslist.add(modelClass);
                    text_name.setText("");
                    text_details.setText("");
                    addapter.notifyItemInserted(itemslist.size());
                }
                if(isinserted==true) {
                    if (!TextUtils.isEmpty(name) && (!TextUtils.isEmpty(details))) {
                        Toast.makeText(MainActivity.this, "Data is Inserted", Toast.LENGTH_SHORT).show();
                    }
                }
                else {
                    Toast.makeText(MainActivity.this, "Data not Inserted", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    public  void ViewData(){
        btn_view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Cursor res = mydb.getAlldata();
                if (res.getCount() == 0) {
                    Toast.makeText(MainActivity.this, "error found", Toast.LENGTH_SHORT).show();
                }
                StringBuffer buffer = new StringBuffer();
                while (res.moveToNext()) {
                    buffer.append("id :" + res.getString(0) + "\n");
                    buffer.append("Name :" + res.getString(1) + "\n");
                    buffer.append("Details :" + res.getString(2) + "\n");
                    buffer.append("Languages :" + res.getString(3) + "\n\n");
                }
                itemslist(buffer.tostring());

            }
        });
    }
}

指定路径目标的解决方案:

with open("input_file.txt", "w") as text_file:
    text_file.write("destination_file")
    text_file.close()